網站首頁 編程語言 正文
一、C#中連接字符串常用內容
參數 | 說明 |
---|---|
Provider | 設置或者返回提供的連接程式的名稱,僅用于OLeDbConnection對象 |
Connection Timeout | 在終止嘗試并產生異常前,等待連接到服務器的連接時間長度(以秒為單位)。默認值是15秒 |
Initial Catalog或Database | 連接的數據庫名稱 |
Data Source或Server | 連接打開時使用的SQL Server服務簽名,或者Access數據庫文件名(localhost或127.0.0.1) |
Password或pwd | Sql Server登錄密碼 |
User ID或uid | Sql Server登錄賬戶 |
Integrated Sercuity | 決定連接是否是安全連接,可能的值有True,False和SSPI(SSPI和True是同義詞) |
以上的參數是不分大小寫的,例如uid,UID,Uid都表示連接的數據庫用戶
Integrated Security參數用于本地windows驗證登錄時,其值應該設置為True,例如("server=localhost;database=mydb;Integrated security=true")
二、.net 數據庫連接池超時問題
(1)數據庫Connection Pool 連接池是什么
每當程序需要讀寫數據庫的時候。Connection.Open()會使用ConnectionString連接到數據庫,數據庫會為程序建立 一個連接,并且保持打開狀態,此后程序就可以使用T-SQL語句來查詢/更新數據庫。當執行到Connection.Close()后,數據庫就會關閉當 前的連接。
但是如果我的程序需要不定時的打開和關閉連接,(比如說 ASP.Net 或是 Web Service ),例如當Http Request發送到服務器的時候、,我們需要打開Connection 然后使用Select* from Table 返回一個DataTable/DataSet給客戶端/瀏覽器,然后關閉當前的Connection。那每次都Open/Close Connection 如此的頻繁操作對于整個系統無疑就成了一種浪費。
ADO.Net Team就給出了一個比較好地解決方法。將先前的Connection保存起來,當下一次需要打開連接的時候就將先前的Connection 交給下一個連接。這就是Connection Pool。
(2)數據庫Connection Pool連接池的運行方式
- 1、當一個程序執行Connection.open()時候,ADO.net就需要判斷,此連接是否支持Connection Pool (Pooling 默認為True)
? (1)、如果指定為False, ADO.net就與數據庫之間創建一個連接,然后返回給程序。
? (2)、如果指定為 True,ADO.net就會根據ConnectString創建一個Connection Pool,然后向Connection Pool中填充Connection。填充多少個Connection由Min Pool Size (默認為0)屬性來決定。例如如果指定為5,則ADO.net會一次與SQL數據庫之間打開5個連接,然后將4個Connection,保存在 Connection Pool中,1個Connection返回給程序。
- 2、當程序執行到Connection.close() 的時候。如果Pooling 為True,ADO.net 就把當前的Connection放到Connection Pool并且保持與數據庫之間的連接。
同時還會判斷Connection Lifetime(默認為0)屬性,0代表無限大,如果Connection存在的時間超過了Connection LifeTime,ADO.net就會關閉的Connection同時斷開與數據庫的連接,而不是重新保存到Connection Pool中。
- 3、當下一次Connection.Open() 執行的時候,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則會再次連接數據庫,創建一個連接,然后將Connection返回給程序。
? (2)、如果已經達到了 MaxPoolSize,ADO.net就不會再次創建任何新的連接,而是等待Connection Pool中被其他程序所占用的Connection釋放,這個等待時間受SqlConnection.ConnectionTimeout(默認是15 秒)限制,也就是說如果時間超過了15秒,SqlConnection就會拋出超時錯誤。
- 5、如果有可用的Connection,從Connection Pool 取出的Connection也不是直接就返回給程序,ADO.net還需要檢查ConnectionString的ConnectionReset屬性 (默認為True)是否需要對Connection 最一次reset。
(3)ASP.NET程序對max pool size的配置
在連接字符串中添加如下內容:
pooling=true;min pool size=5;max pool size=512;
其中Max Pool Size如果未設置則默認為100,理論最大值為32767。最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。在等待隊列中,默認等待與服務器的連接的時間為15秒。
默認連接池大小一般是100。
(4)查看應用程序池占用數量
select * from sysprocesses where dbid= db_id('數據庫名')
查詢出來有幾條數據就證明有幾個連接數量。
原文鏈接:https://www.cnblogs.com/wml-it/p/15967824.html
相關推薦
- 2022-10-20 VS?Code?常用自定義配置代碼規范保存自動格式化_相關技巧
- 2022-04-24 基于Python制作一個文件去重小工具_python
- 2023-04-02 使用Pytorch如何完成多分類問題_python
- 2022-02-22 用Go+Redis實現分布式鎖的示例代碼_Golang
- 2022-04-08 從頭學習C語言之if語句的使用_C 語言
- 2022-06-12 Python數據傳輸黏包問題_python
- 2022-07-12 Linux命令之美|linux使用tar誤解壓之后,如何刪除解壓后的文件
- 2022-09-02 R語言which函數介紹及Rcpp改寫詳解_R語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支