2013-06-12 55 views
0

我有我的SqlConnection:SqlConnection的狀態變化以一種奇怪的方式

 this._sqlConnection = new SqlConnection(sCxn); 
     this._sqlConnection.StateChange += new StateChangeEventHandler(_sqlConnection_StateChange); 

,這就是趕連接狀態的切換事件的方法:

void _sqlConnection_StateChange(object sender, StateChangeEventArgs e) 
    { 
     this._previousState = e.OriginalState; 
     this._connectionState = e.CurrentState; 
     log.WriteLog("Connection change status: previous " + e.OriginalState.ToString() + ", current " + e.CurrentState.ToString(), log.INFO); 
    } 

當我切正常的應用程序在連接活動,我有正確的迴應方法:

連接更改狀態:上一個打開,當前關閉

但是,當我重新連接後(啓動數據庫服務),我開始得到這個事件序列:

  • 41年9月10日:連接更改狀態:以前關閉,當前打開
  • 41年9月10日:連接更改狀態:以前開放,目前封閉式
  • 51年9月10日:連接更改狀態:以前關閉,當前打開
  • 51年9月10日:連接更改狀態:以前開放,目前封閉式
  • 01年9月11日:精讀nection更改狀態:以前關閉,當前打開
  • 01年11月9日:連接更改狀態:以前開放,目前封閉式
  • 12年9月11日:連接更改狀態:以前關閉,當前打開
  • 12年9月11日:連接改變狀態:上一次打開,當前關閉

該應用程序能夠查詢數據庫,但連接狀態保持關閉狀態。

我在做什麼錯了?

由於提前, 塞繆爾

+0

你是如何查詢數據庫的? Linq-to-sql將自動打開和關閉連接。 – Blorgbeard

回答

0

請仔細閱讀有關連接池。這是一個很好的參考,學習如何做出最好的吧: http://www.connectionstrings.com/Articles/Show/connection-pooling

從鏈接複製:

  • 確保您連接每次都使用相同的連接字符串。 僅當連接字符串相同時,連接池才起作用。 如果連接字符串不同,那麼打開一個新的連接將被打開 。
  • 只在需要時打開連接,而不是之前。
  • 一旦完成使用,請立即關閉連接。
  • 如果未使用連接,請不要將其打開。
  • 確保在關閉連接之前刪除所有臨時對象。
  • 確保在關閉連接之前關閉任何用戶定義的事務。
  • 如果您想利用連接 池,請勿使用應用程序角色。
+0

謝謝,所以這就是連接打開和關閉的原因。 –