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

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

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

       「警告:數據庫

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

  A.方法1(C#):線程

       using (SqlConnection connection = new SqlConnection()) {對象

       connection.ConnectionString = connectionString;進程

        connection.Open();事務

       //讀寫操做............................資源

     //此處不用顯示關閉鏈接,由於using語法會關閉鏈接get

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

     SqlConnection connection = new SqlConnection(ConnectionString);cmd

     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
相關文章
相關標籤/搜索