2017-01-25 49 views
0

我在主屏幕上有一個啓動按鈕的Windows應用程序。一旦我啓動exe並點擊開始按鈕,就會打開與SQL數據庫的連接。我沒有在任何時候明確關閉連接,除非它自己關閉,因此我重新建立了與db的連接。我的問題是會導致任何性能問題?我懷疑,因爲在任何時間點只有一個連接是開放的。請指教。提前致謝。在.NET窗口應用程序上打開一個SQL連接啓動並且不關閉

的代碼如下:

私人小組Form1_Load的(BYVAL發件人爲System.Object的,BYVALË作爲System.EventArgs)把手MyBase.Load

Timer1.Interval = 30000 
    fnDbConnect() 
    lblMessage.Text = "" 
End Sub 

私人小組btnStartSMS_Click(BYVAL發件人爲System.Object的,BYVALË作爲System.EventArgs)把手btnStartSMS.Click

btnStartSMS.BackColor = Color.Red 
    If ObjCn.State = ConnectionState.Open Then 
     Timer1.Enabled = True 
    Else 
     If fnDbConnect() Then 
      Timer1.Enabled = True 
     Else 
      MsgBox("An error occured while connecting to database. Please try later", MsgBoxStyle.Critical) 
     End If 

    End If 

End Sub 

而且ObjCn.State = ConnectionState.Closed檢查哪裏應用程序並將其爲真,則調用fnDbConnect()。

+1

這取決於有多少客戶端應用程序嘗試同時連接到您的服務器。此外,如果您不使用連接,它將不可避免地超時,因此您需要重新連接。你需要仔細考慮你爲什麼這樣做。 – zaitsman

+0

*除非它自己關閉* - 這可能很難檢測,每個與數據庫交互的調用都需要處理。 –

回答

3

由於它不包含更多的代碼寫入,所以保持連接始終處於打開狀態毫無意義。恕我直言,最好的推薦是使用連接池。每當您的應用程序開始增長時,這也將是一個更好的實踐。對於所有的說,你可以做你的SQL連接是這樣的:

using (SqlConnection connection = new SqlConnection("yourConnectionString")) 
{ 
    connection.Open(); 
    // Do whatever you need to do 
    connection.Close(); 
} 

如果保持連接打開,該連接將無法使用,需要comunicate到數據庫服務器的一些其他的事情。 此外,保持連接處於打開狀態,最終會導致您在每次垃圾收集器運行時擦除並處理連接。基本上,只要你需要使用它,打開和關閉你的連接。不要打開你的連接。爲此,更好的用法如using聲明中的示例所示。這將確保您的連接在操作完成時正確處理。

+1

+1。你可以想象,如果/當他們決定做任何*任何涉及多線程的任何地方也觸及數據庫時,OP原來的方案需要多少重做。 –

相關問題