在執行一段VB程式,連接到SQL SERVER,將某一個 A 資料表中的資料寫進另一個 B 資料表時,
出現了以下的錯誤訊息:
行號:360
錯誤代碼:-2147467259
描述:登錄超時已過期
此錯誤出現在執行某一子程式時,程式片斷如下:
Dim RS2 As New ADODB.Recordset
Dim RecCount As Long
On Error GoTo errh
180 With RS2
270 If .State = adStateOpen Then .Close
360 .Open "Select Count(*) As RecCount From " & TblName, tmp_cn, adOpenForwardOnly, adLockReadOnly
450 RecCount = .Fields("RecCount")
540 .Close
630 End With
TblName 是 B 資料表的名稱
在此時,早已連接上資料庫,且已有多筆資料已由 A 資料表寫入 B 資料表中,
且此錯誤訊息也不是每次執行程式時都會出現,
請問有那位知道為什么會出現此錯誤訊息嗎?
注:連接資料庫時已設定以下的連接引數:
.ConnectionTimeout = 30
.CommandTimeout = 0
uj5u.com熱心網友回復:
.ConnectionTimeout = 60
.CommandTimeout = 60
uj5u.com熱心網友回復:
To zhao4zhong1感謝您的回答,
請問為何會出現此錯誤訊息呢(這是我最想知道的部份)?
此時應該已登錄資料庫了吧!!
且已有部份的紀錄已寫入到 B 資料表了,
代表我原先所設定的連接引數應可正確連接到資料庫了,
若換成您所提供的連接引數,
會有什么不同嗎?
uj5u.com熱心網友回復:
.ConnectionTimeout = 0 這樣試試uj5u.com熱心網友回復:
把連接關掉重新打開。。。uj5u.com熱心網友回復:
To 版主及u011266608若改成 .ConnectionTimeout = 0
在無法連接到資料庫的狀況下,
程式會不會變成無回應,
而讓用戶認為程式已當掉了?
另外我比較想知道的是,
在已連接到資料庫的狀況下,
為何還會出現 登錄超時已過期 這樣的錯誤訊息?
可否說明一下可能的原因嗎?
感謝兩位的回答!
uj5u.com熱心網友回復:
.ConnectionTimeout = 0 會沒回應,應該按照網路性能取一個合適的值。這只時影響打開連接的超時,除非很差的網路,默認值30秒通常夠用。
CommandTimeout 是客戶端用的,發出請求多少時間沒回傳就認為超時。
除非是長時間的計算或更新,一遍也用默認值。
大資料量讀取用分頁而不是調整超時時間。
你的超時很可能時多用戶沖突引起的,你要進行 COUNT(*) 的這個表一直被其它會話鎖定中,一定時間后SQL Server就會報超時。
這是業務規劃上的問題,盡量用小批量快速的更新事務,降低多用戶沖突的概率。
uj5u.com熱心網友回復:
TO Tiger_Zhao感謝您的回復,
可是我不明白的是,
若是因下 SQL 指令而導致的超時,
錯誤訊息應該是”連接超時”而不是”登錄超時”,
請問其所顯示”登錄超時已過期”的真正意思及原因為何?
uj5u.com熱心網友回復:
連接超時是客戶端判定的,這里應該是服務端的錯誤,可能翻譯錯誤號到文本時比較簡單,描述得不正確。建議到SQL Server Management Studio中查看下日志。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/99656.html
上一篇:vb編程實作灰度影像轉偽彩色圖
