C#中SQL Server數據庫連接池使用及連接字符串部分關鍵字使用說明


(1) 數據庫的連接使用后,必須采用close()連接等效的方法關閉連接。只有關閉后,連接才能進入連接池。

       參見微軟的使用連接池說明:https://msdn.microsoft.com/zh-cn/library/8xx3tyca(v=vs.80).aspx

       “警告:

        我們建議您在使用完連接時一定要關閉連接,以便連接可以返回池。要關閉連接,可以使用 Connection 對象的 Close 或 Dispose 方法,也可以通過在 C# 的 using 語句中或在 Visual Basic 的 Using 語句中打開所有連接。不是顯式關閉的連接可能不會添加或返回到池中。例如,如果連接已超出范圍但沒有顯式關閉,則僅當達到最大池大小而該連接仍然有效時,該連接才會返回到連接池中。有關更多信息,請參見 Visual Basic 的using 語句(C# 參考)如何:釋放系統資源。”

  A.方法1(C#):

       using (SqlConnection connection = new SqlConnection()) {

       connection.ConnectionString = connectionString;

        connection.Open();

       //讀寫操作............................

     //此處不用顯示關閉連接,因為using語法會關閉連接

       }
   B.方法2(C#):
      SqlConnection connection = new SqlConnection();
      connection.ConnectionString = connectionString;
       connection.Open();
     ............................
       connection.Close();
   C.方法3(C#利用讀數據時):

     SqlConnection connection = new SqlConnection(ConnectionString);

     string _sql = "Select * from [Data] where ......;

    SqlCommand _cmd = new SqlCommand(_sql, connection);
     connection.Open();
    SqlDataReader _reader = _cmd.ExecuteReader(CommandBehavior.CloseConnection);//此處讀取完成后關閉讀取時關閉對應連接

      ............................
       _reader.Close();//此處必須顯示關閉讀取,這樣才能配合CommandBehavior.CloseConnection關閉對應的連接
(2)與數據庫嘗試連接的時間與數據庫連接通信超時時間Connection Timeout,默認15S。
(3)控制連接是否進入連接池
        SqlConnection.ConnectionString 屬性詳細見https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.80).aspx 
是否使能池程序在創建線程的當前事務上下文中自動登記連接 Enlist,是否從連接池取連接或創建新連接后存入合適的連接池Pooling,連接池最大最小值Max Pool Size,Min Pool Size
           例如:  ConnectionString = "Data Source=(local);Initial Catalog=AdventureWorks;" + "Integrated Security=SSPI;";
          關閉連接池  "Enlist=false;"    "Pooling=false;",即為:
          ConnectionString=ConnectionString+"Enlist=false;"+"Pooling=false;"
(3) 連接進入連接池后,以下關鍵字在數據庫連接時才起作用
      SqlConnection.ConnectionString 屬性Connection Lifetime, 設置連接池中的連接在連接池中的存儲並銷毀時間
(4)如果不想讓連接進入連接池(即可能存在連接池打開的情況,不通過"Pooling=false;"設置),可采用在程序中對使用的連接采用如下方法讓連接使用完成后不會進入連接池
       SqlConnection.ClearPool(connection);
      此方法可以解決數據庫連接中 sleeping進程過多的問題。
      參見:https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.clearpool(v=vs.80).aspx
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM