資料庫超時的坑

2022-01-13 14:41:58 字數 1068 閱讀 7291

每次對資料庫連線時,我們有時候會碰到連線超時或者命令超時,這兩個超時是不一樣的。以ado.net為例,當客戶端和伺服器端連線時,碰到的超時情況主要有下面幾種:

當從連線池獲取乙個連線時,碰到超時。

當建立乙個全新連線(而不是從連線池獲取)時,碰到超時。

當傳送乙個命令(command)到sql server時,超時。

當傳送命令(連線字串帶有「context connection=true」屬性)到sql server時,超時。

當不是顯示的傳送乙個命令(implicitly)到sql server時,碰到超時。

當執行非同步命令時,(beginexecute)碰到超時。

當從伺服器端,獲取行時,碰到超時。

當用bulk copy方式,上傳資料時,碰到超時。

這些超時主要是通過連線字串中的connect timeout和sqlcommand.commandtimeout來進行控制。前面兩種是登入超時由connection timeout來決定什麼時候超時,後面幾種是命令超時由command timeout來決定什麼時候超時。

sqlconnection.connectiontimeout : 

1. 說明: 獲取在嘗試建立連線時終止嘗試並生成錯誤之前所等待的時間。

2. 預設值:等待連線開啟的時間(以秒為單位)。預設值為 15 秒。

3. 備註:值 0 指示無限制

4. 唯讀

sqlcommand.commandtimeout 

1. 說明:獲取或設定在終止執行命令的嘗試並生成錯誤之前的等待時間。

2. 預設值:等待命令執行的時間(以秒為單位)。預設為 30 秒。

3. 備註:值 0 指示無限制,在 commandtimeout 中應避免值 0,否則會無限期地等待執行命令。

4. 可讀可寫

特別注意:

"超時時間已到。在操作完成之前超時時間已過或伺服器未響應"

類似這種錯誤,一般是 sqlcommand.commandtimeout  或者 sqlbulkcopy.bulkcopytimeout 的時間超時, 而不是 sqlconnection.connectiontimeout。

資料庫 not in 的坑

以oracle資料庫為列 create table test 20191124 name varchar2 5 num cnt number insert into test 20191124 values a 1 insert into test 20191124 values b 2 inser...

關於nifi的資料庫連線超時

因為本人是做資料庫的嗎。最近需要弄nifi 可是很苦惱的是,這個資料庫鏈結總是失敗失敗 跟著我的步驟開啟 資料庫鏈結,然後在右邊有個閃電的符號b 被禁止了,把它設為disable 之後我們如果資料庫鏈結沒問題的話 我們可以在下面的一行,這個裡面放乙個當前的資料庫的查詢語句,前提是可以查出來資料的,能...

怎麼判斷資料庫連線超時

如何判斷資料庫連線超時 環境vs2010 mssql 連線資料庫時,如果是遠端資料庫,如192.232.1.53,則要連線很長時間,如何才能設定超時時間。如5秒。我用connect timeout 5,或command.commandtimeout 5 都不起作用。解決方案 多執行緒c codeus...