欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.Net連接數(shù)據(jù)庫(kù)的方式詳解

 更新時(shí)間:2022年05月02日 15:22:11   作者:農(nóng)碼一生  
本文詳細(xì)講解了.Net連接數(shù)據(jù)庫(kù)的方式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、C#中連接字符串常用內(nèi)容

參數(shù)說(shuō)明
Provider設(shè)置或者返回提供的連接程式的名稱,僅用于OLeDbConnection對(duì)象
Connection Timeout在終止嘗試并產(chǎn)生異常前,等待連接到服務(wù)器的連接時(shí)間長(zhǎng)度(以秒為單位)。默認(rèn)值是15秒
Initial Catalog或Database連接的數(shù)據(jù)庫(kù)名稱
Data Source或Server連接打開(kāi)時(shí)使用的SQL Server服務(wù)簽名,或者Access數(shù)據(jù)庫(kù)文件名(localhost或127.0.0.1)
Password或pwdSql Server登錄密碼
User ID或uidSql Server登錄賬戶
Integrated Sercuity決定連接是否是安全連接,可能的值有True,False和SSPI(SSPI和True是同義詞)

以上的參數(shù)是不分大小寫(xiě)的,例如uid,UID,Uid都表示連接的數(shù)據(jù)庫(kù)用戶

Integrated Security參數(shù)用于本地windows驗(yàn)證登錄時(shí),其值應(yīng)該設(shè)置為T(mén)rue,例如("server=localhost;database=mydb;Integrated security=true")

二、.net 數(shù)據(jù)庫(kù)連接池超時(shí)問(wèn)題

(1)數(shù)據(jù)庫(kù)Connection Pool 連接池是什么

每當(dāng)程序需要讀寫(xiě)數(shù)據(jù)庫(kù)的時(shí)候。Connection.Open()會(huì)使用ConnectionString連接到數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)會(huì)為程序建立 一個(gè)連接,并且保持打開(kāi)狀態(tài),此后程序就可以使用T-SQL語(yǔ)句來(lái)查詢/更新數(shù)據(jù)庫(kù)。當(dāng)執(zhí)行到Connection.Close()后,數(shù)據(jù)庫(kù)就會(huì)關(guān)閉當(dāng) 前的連接。

但是如果我的程序需要不定時(shí)的打開(kāi)和關(guān)閉連接,(比如說(shuō) ASP.Net 或是 Web Service ),例如當(dāng)Http Request發(fā)送到服務(wù)器的時(shí)候、,我們需要打開(kāi)Connection 然后使用Select* from Table 返回一個(gè)DataTable/DataSet給客戶端/瀏覽器,然后關(guān)閉當(dāng)前的Connection。那每次都Open/Close Connection 如此的頻繁操作對(duì)于整個(gè)系統(tǒng)無(wú)疑就成了一種浪費(fèi)。

ADO.Net Team就給出了一個(gè)比較好地解決方法。將先前的Connection保存起來(lái),當(dāng)下一次需要打開(kāi)連接的時(shí)候就將先前的Connection 交給下一個(gè)連接。這就是Connection Pool。

(2)數(shù)據(jù)庫(kù)Connection Pool連接池的運(yùn)行方式

  • 1、當(dāng)一個(gè)程序執(zhí)行Connection.open()時(shí)候,ADO.net就需要判斷,此連接是否支持Connection Pool (Pooling 默認(rèn)為T(mén)rue)

? (1)、如果指定為False, ADO.net就與數(shù)據(jù)庫(kù)之間創(chuàng)建一個(gè)連接,然后返回給程序。

? (2)、如果指定為 True,ADO.net就會(huì)根據(jù)ConnectString創(chuàng)建一個(gè)Connection Pool,然后向Connection Pool中填充Connection。填充多少個(gè)Connection由Min Pool Size (默認(rèn)為0)屬性來(lái)決定。例如如果指定為5,則ADO.net會(huì)一次與SQL數(shù)據(jù)庫(kù)之間打開(kāi)5個(gè)連接,然后將4個(gè)Connection,保存在 Connection Pool中,1個(gè)Connection返回給程序。

  • 2、當(dāng)程序執(zhí)行到Connection.close() 的時(shí)候。如果Pooling 為T(mén)rue,ADO.net 就把當(dāng)前的Connection放到Connection Pool并且保持與數(shù)據(jù)庫(kù)之間的連接。

同時(shí)還會(huì)判斷Connection Lifetime(默認(rèn)為0)屬性,0代表無(wú)限大,如果Connection存在的時(shí)間超過(guò)了Connection LifeTime,ADO.net就會(huì)關(guān)閉的Connection同時(shí)斷開(kāi)與數(shù)據(jù)庫(kù)的連接,而不是重新保存到Connection Pool中。

  • 3、當(dāng)下一次Connection.Open() 執(zhí)行的時(shí)候,ADO.Net就會(huì)判斷新的ConnectionString與之前保存在Connection Pool中的Connection的connectionString是否一致。
  • 4、 ADO.net需要判斷當(dāng)前的Connection Pool中是否有可以使用的Connection(沒(méi)有被其他程序所占用),如果沒(méi)有的話,ADO.net就需要判斷ConnectionString設(shè) 置的Max Pool Size (默認(rèn)為100)

? (1)、如果Connection Pool中的所有Connection沒(méi)有達(dá)到Max Pool Size,ADO.net則會(huì)再次連接數(shù)據(jù)庫(kù),創(chuàng)建一個(gè)連接,然后將Connection返回給程序。

? (2)、如果已經(jīng)達(dá)到了 MaxPoolSize,ADO.net就不會(huì)再次創(chuàng)建任何新的連接,而是等待Connection Pool中被其他程序所占用的Connection釋放,這個(gè)等待時(shí)間受SqlConnection.ConnectionTimeout(默認(rèn)是15 秒)限制,也就是說(shuō)如果時(shí)間超過(guò)了15秒,SqlConnection就會(huì)拋出超時(shí)錯(cuò)誤。

  • 5、如果有可用的Connection,從Connection Pool 取出的Connection也不是直接就返回給程序,ADO.net還需要檢查ConnectionString的ConnectionReset屬性 (默認(rèn)為T(mén)rue)是否需要對(duì)Connection 最一次reset。

(3)ASP.NET程序?qū)ax pool size的配置

在連接字符串中添加如下內(nèi)容:

pooling=true;min pool size=5;max pool size=512;

其中Max Pool Size如果未設(shè)置則默認(rèn)為100,理論最大值為32767。最大連接數(shù)是連接池能申請(qǐng)的最大連接數(shù),如果數(shù)據(jù)庫(kù)連接請(qǐng)求超過(guò)此數(shù),后面的數(shù)據(jù)庫(kù)連接請(qǐng)求將被加入到等待隊(duì)列中,這會(huì)影響之后的數(shù)據(jù)庫(kù)操作。在等待隊(duì)列中,默認(rèn)等待與服務(wù)器的連接的時(shí)間為15秒。

默認(rèn)連接池大小一般是100。

(4)查看應(yīng)用程序池占用數(shù)量

select * from sysprocesses where dbid= db_id('數(shù)據(jù)庫(kù)名')

查詢出來(lái)有幾條數(shù)據(jù)就證明有幾個(gè)連接數(shù)量。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論