中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#數據庫連接池的創建

發布時間:2021-07-15 15:07:13 來源:億速云 閱讀:222 作者:chen 欄目:編程語言

本篇內容主要講解“C#數據庫連接池的創建”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#數據庫連接池的創建”吧!

使用C#數據庫連接池

連接到數據庫服務器通常由幾個需要軟長時間的步驟組成。必須建立物理通道(例如套接字或命名管道),必須與服務器進行初次連接,必須分析連接字符串信息,必須由服務器對連接進行身份驗證,等等。

實際上,大部份的應用程序都是使用一個或幾個不同的連接配置。當應用程序的數據量和訪問量大的時候,這意味著在運行應用程序的過程中,許多相同的連接將反復地被打開和關閉,從而會引起數據庫服務器效率低下甚至引發程序崩潰。為了確保應用程序的穩定和降低性能成本,我們可以在ADO.NET中使用稱為連接池的優化方法來管理維護連接。

C#數據庫連接池可以減少創建連接的次數。定義最小連接數(固定連接數),當用戶在連接上調用Open,連接池就會檢查池中是否有可用的連接。如果發現有連接可用,會將該連接返回給調用者,而不是創建新連接。應用程序在該連接上調用Close時,連接池會判斷該連接是否在最小連接數之內,如果“是”會將連接回收到活動連接池中而不是真正關閉連接,否則將燒毀連接。連接返回到池中之后,即可在下一個Open調用中重復使用。

創建C#數據庫連接池

以下示例使用C#連接SQL數據庫:

classDbConn  {  //usingSystem.Data;  //usingSystem.Data.SqlClient;  privateconstintMaxPool=10;//***連接數  privateconstintMinPool=5;//最小連接數  privateconstboolAsyn_Process=true;//設置異步訪問數據庫  privateconstboolMars=true;//在單個連接上得到和管理多個、僅向前引用和只讀的結果集(ADO.NET2.0)  privateconstintConn_Timeout=15;//設置連接等待時間  privateconstintConn_Lifetime=15;//設置連接的生命周期  privatestringConnString="";//連接字符串  privateSqlConnectionSqlDrConn=null;//連接對象   publicDbConn()//構造函數  {  ConnString=GetConnString();  SqlDrConn=newSqlConnection(ConnString);  }   privatestringGetConnString()  {  return"server=localhost;" +"integratedsecurity=sspi;" +"database=pubs;" +"MaxPoolSize="+MaxPool+";" +"MinPoolSize="+MinPool+";" +"ConnectTimeout="+Conn_Timeout+";" +"ConnectionLifetime="+Conn_Lifetime+";" +"AsynchronousProcessing="+Asyn_Process+";";  //+"MultipleActiveResultSets="+Mars+";";  }   publicDataTableGetDataReader(stringStrSql)//數據查詢  {  //當連接處于打開狀態時關閉,然后再打開,避免有時候數據不能及時更新  if(SqlDrConn.State==ConnectionState.Open)  {  SqlDrConn.Close();  }  try {  SqlDrConn.Open();  SqlCommandSqlCmd=newSqlCommand(StrSql,SqlDrConn);  SqlDataReaderSqlDr=SqlCmd.ExecuteReader();  if(SqlDr.HasRows)  {  DataTabledt=newDataTable();  //讀取SqlDataReader里的內容  dt.Load(SqlDr);  //關閉對象和連接  SqlDr.Close();  SqlDrConn.Close();  returndt;  }  returnnull;  }  catch(Exceptionex)  {  System.Windows.Forms.MessageBox.Show(ex.Message);  returnnull;  }  finally {  SqlDrConn.Close();  }  }  }

通過調用SqlDrConn.Open()方法打開連接,這時候連接池就會初始化并建立設定的最小連接數。想更清楚了解到連接池的狀況可以通過SQL的查詢分析器執行存儲過程sp_Who,它會列出當前的數據庫進程,查看loginname、dbname可以區分用戶的連接信息,但要注意的是登錄查詢分析器本身會使用兩個連接,所以***用另一個用戶名登錄查詢分析器。使用此方法還有一個麻煩地方就是要經常按“執行查詢”以更新進程信息。還有另一種方法個人認為較好的,通過控制面板→管理工具→性能,右擊添加計算器,性能對象選擇SQlServer:GeneralStatistics(常規統計)然后計算器選擇UserConnections(用戶連接)***按“添加”就可以實時查看當前連接數。

到了這里,連接池已經實現了,但問題往往會出現在運行過程中。如連接池的連接數滿了該怎樣處理?在這里我們應該合理設置連接字符串中的ConnectTimeout屬性和ConnectionLifetime屬性(上面有解釋)延長等待時間,盡可能地在每次使用完連接之后調用Close方法關閉連接。但從中也有沒法避免的,當連接數滿了并且申請連接的時間超過設置連接等待的時間時,程序將會引發InvalidOperationExceptio異常,我們可以通過捕獲此異常向用戶界面提示“系統正忙,請稍后再連接……”之類的信息來緩解這種情況。此外,也有另一種方法來解決這種情況,就是利用ADO.NET2.0新特性“異步進程”,對數據庫進行異步操作,確保連接能夠及時調用Close方法關閉連接,這樣能大大減少正在使用的連接數。

使用方法:在連接字符串中加上AsynchronousProcessing=true表示使用異步處理操作。

當應用程序不再需要用到連接池的時候可以使用ClearPool或ClearAllPools方法清空連接池也可作重置連接池使用,方法如下:

SqlConnection.ClearPool(SqlConnectionconnection)清空關聯的連接池

SqlConnection.ClearAllPools()清空所有連接池

調用上述方法,如果連接正在使用,連接池會做相應標記,等連接關閉時自動燒毀。

小結C#數據庫連接池

到此,相信大家對“C#數據庫連接池的創建”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗城| 城市| 米脂县| 子洲县| 芦山县| 翁源县| 桂平市| 苏尼特左旗| 鹤壁市| 玉田县| 安陆市| 巴楚县| 信丰县| 福清市| 青岛市| 景洪市| 丰宁| 万年县| 湖南省| 陆丰市| 宽甸| 会理县| 江川县| 澄江县| 卢氏县| 永春县| 泾源县| 湘潭县| 河西区| 忻城县| 台安县| 弥勒县| 保定市| 保康县| 南华县| 河津市| 恩施市| 共和县| 深水埗区| 平定县| 大庆市|