.Net連接數(shù)據(jù)庫的方式詳解
一、C#中連接字符串常用內(nèi)容
| 參數(shù) | 說明 |
|---|---|
| Provider | 設置或者返回提供的連接程式的名稱,僅用于OLeDbConnection對象 |
| Connection Timeout | 在終止嘗試并產(chǎn)生異常前,等待連接到服務器的連接時間長度(以秒為單位)。默認值是15秒 |
| Initial Catalog或Database | 連接的數(shù)據(jù)庫名稱 |
| Data Source或Server | 連接打開時使用的SQL Server服務簽名,或者Access數(shù)據(jù)庫文件名(localhost或127.0.0.1) |
| Password或pwd | Sql Server登錄密碼 |
| User ID或uid | Sql Server登錄賬戶 |
| Integrated Sercuity | 決定連接是否是安全連接,可能的值有True,False和SSPI(SSPI和True是同義詞) |
以上的參數(shù)是不分大小寫的,例如uid,UID,Uid都表示連接的數(shù)據(jù)庫用戶
Integrated Security參數(shù)用于本地windows驗證登錄時,其值應該設置為True,例如("server=localhost;database=mydb;Integrated security=true")
二、.net 數(shù)據(jù)庫連接池超時問題
(1)數(shù)據(jù)庫Connection Pool 連接池是什么
每當程序需要讀寫數(shù)據(jù)庫的時候。Connection.Open()會使用ConnectionString連接到數(shù)據(jù)庫,數(shù)據(jù)庫會為程序建立 一個連接,并且保持打開狀態(tài),此后程序就可以使用T-SQL語句來查詢/更新數(shù)據(jù)庫。當執(zhí)行到Connection.Close()后,數(shù)據(jù)庫就會關(guān)閉當 前的連接。
但是如果我的程序需要不定時的打開和關(guān)閉連接,(比如說 ASP.Net 或是 Web Service ),例如當Http Request發(fā)送到服務器的時候、,我們需要打開Connection 然后使用Select* from Table 返回一個DataTable/DataSet給客戶端/瀏覽器,然后關(guān)閉當前的Connection。那每次都Open/Close Connection 如此的頻繁操作對于整個系統(tǒng)無疑就成了一種浪費。
ADO.Net Team就給出了一個比較好地解決方法。將先前的Connection保存起來,當下一次需要打開連接的時候就將先前的Connection 交給下一個連接。這就是Connection Pool。
(2)數(shù)據(jù)庫Connection Pool連接池的運行方式
- 1、當一個程序執(zhí)行Connection.open()時候,ADO.net就需要判斷,此連接是否支持Connection Pool (Pooling 默認為True)
? (1)、如果指定為False, ADO.net就與數(shù)據(jù)庫之間創(chuàng)建一個連接,然后返回給程序。
? (2)、如果指定為 True,ADO.net就會根據(jù)ConnectString創(chuàng)建一個Connection Pool,然后向Connection Pool中填充Connection。填充多少個Connection由Min Pool Size (默認為0)屬性來決定。例如如果指定為5,則ADO.net會一次與SQL數(shù)據(jù)庫之間打開5個連接,然后將4個Connection,保存在 Connection Pool中,1個Connection返回給程序。
- 2、當程序執(zhí)行到Connection.close() 的時候。如果Pooling 為True,ADO.net 就把當前的Connection放到Connection Pool并且保持與數(shù)據(jù)庫之間的連接。
同時還會判斷Connection Lifetime(默認為0)屬性,0代表無限大,如果Connection存在的時間超過了Connection LifeTime,ADO.net就會關(guān)閉的Connection同時斷開與數(shù)據(jù)庫的連接,而不是重新保存到Connection Pool中。
- 3、當下一次Connection.Open() 執(zhí)行的時候,ADO.Net就會判斷新的ConnectionString與之前保存在Connection Pool中的Connection的connectionString是否一致。
- 4、 ADO.net需要判斷當前的Connection Pool中是否有可以使用的Connection(沒有被其他程序所占用),如果沒有的話,ADO.net就需要判斷ConnectionString設 置的Max Pool Size (默認為100)
? (1)、如果Connection Pool中的所有Connection沒有達到Max Pool Size,ADO.net則會再次連接數(shù)據(jù)庫,創(chuàng)建一個連接,然后將Connection返回給程序。
? (2)、如果已經(jīng)達到了 MaxPoolSize,ADO.net就不會再次創(chuàng)建任何新的連接,而是等待Connection Pool中被其他程序所占用的Connection釋放,這個等待時間受SqlConnection.ConnectionTimeout(默認是15 秒)限制,也就是說如果時間超過了15秒,SqlConnection就會拋出超時錯誤。
- 5、如果有可用的Connection,從Connection Pool 取出的Connection也不是直接就返回給程序,ADO.net還需要檢查ConnectionString的ConnectionReset屬性 (默認為True)是否需要對Connection 最一次reset。
(3)ASP.NET程序?qū)ax pool size的配置
在連接字符串中添加如下內(nèi)容:
pooling=true;min pool size=5;max pool size=512;
其中Max Pool Size如果未設置則默認為100,理論最大值為32767。最大連接數(shù)是連接池能申請的最大連接數(shù),如果數(shù)據(jù)庫連接請求超過此數(shù),后面的數(shù)據(jù)庫連接請求將被加入到等待隊列中,這會影響之后的數(shù)據(jù)庫操作。在等待隊列中,默認等待與服務器的連接的時間為15秒。
默認連接池大小一般是100。
(4)查看應用程序池占用數(shù)量
select * from sysprocesses where dbid= db_id('數(shù)據(jù)庫名')查詢出來有幾條數(shù)據(jù)就證明有幾個連接數(shù)量。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- .NET?Core配置連接字符串和獲取數(shù)據(jù)庫上下文實例
- 詳解.NET數(shù)據(jù)庫連接池
- ASP.NET WebAPI連接數(shù)據(jù)庫的方法
- .NET連接數(shù)據(jù)庫以及基本的增刪改查操作教程
- ASP.NET中各種連接數(shù)據(jù)庫的配置的方法及json數(shù)據(jù)轉(zhuǎn)換
- ASP.NET連接 Access數(shù)據(jù)庫的幾種方法
- ASP.net如何連接SQL SERVER 2012數(shù)據(jù)庫
- ASP.NET連接數(shù)據(jù)庫并獲取數(shù)據(jù)方法總結(jié)
- ASP.NET連接sql2008數(shù)據(jù)庫的實現(xiàn)代碼
- asp.net連接數(shù)據(jù)庫讀取數(shù)據(jù)示例分享
相關(guān)文章
ASP.NET利用MD.DLL轉(zhuǎn)EXCEL具體實現(xiàn)
首先引入MD.dll 文件(附有下載地址)然后建立無CS文件的DownExcel.aspx 文件,接下來是調(diào)用方法,感興趣的朋友可以參考下哈2013-05-05
ASP.NET連接數(shù)據(jù)庫并獲取數(shù)據(jù)方法總結(jié)
這篇文章主要介紹了ASP.NET連接數(shù)據(jù)庫并獲取數(shù)據(jù)方法,結(jié)合實例分析總結(jié)了ASP.NET連接數(shù)據(jù)庫及獲取數(shù)據(jù)的相關(guān)實現(xiàn)技巧,并附帶了web.config配置文件的使用方法與相關(guān)注意事項,需要的朋友可以參考下2015-11-11
asp.net LINQ中數(shù)據(jù)庫連接字符串的問題
這兩天一直在用LINQ做開發(fā),也是第一次嘗試用LINQ做開發(fā),效率沒的說,開發(fā)過程中遇到一個問題困擾了我好久,今天問題終于解決了,發(fā)上來和大家分享一下,也給自己做個備忘。2010-03-03
Asp.net GridView使用大全(分頁實現(xiàn))
關(guān)于GridView的使用涉及很多,網(wǎng)絡上零零散散的有一些,為了讓自己使用方便,也為了大家能很好的學習與工作,我把網(wǎng)絡上的GridView使用方法收集了一些2013-04-04
Asp.Net 數(shù)據(jù)操作類(附通用數(shù)據(jù)基類)
數(shù)據(jù)操作類代碼,方便在asp.net操作數(shù)據(jù)庫2008-11-11

