2009-01-09 92 views
4

我們公司有一大堆VB6應用程序。我們正在嘗試調試隨機SQL超時錯誤,並在Audit Login事件中使用SQL Server Profiler進行跟蹤。我們注意到這些連接是以非流氓方式進入的。我們在SQL Server 2000中使用SQLOLEDB提供程序& 2005.我搜索了互聯網,並且我遇到的所有問題都說默認情況下SQLOLEDB提供程序中的連接是集中的,但我們沒有看到這一點。以下是我們用來連接數據庫的代碼。我們確實需要將這些連接彙集起來,因爲我們認爲這可能是我們的隨機超時錯誤的問題。任何人都可以點亮一下爲什麼連接池無法正常工作以及有什麼辦法可以使它工作?謝謝。VB6 ADO連接池

Dim cnn As New ADODB.Connection 
cnn.ConnectionString = "Provider=SQLOLEDB;Data Source=xxx;Catalog=xxx;User ID=xxx Password=xxx;" 
Call cnn.Open 
Dim cmd As New ADODB.Command 
Set cmd.ActiveConnection = cnn 
cmd.CommandText = "SELECT * FROM [Table]" 
Dim rs As New ADODB.RecordSet 
Call rs.Open(cmd, , adOpenStatic, adLockOptimistic) 
While Not rs.eof 
    'Do stuff 
    Call rs.MoveNext 
Wend 
'Close and Dispose connection here 

回答

0

我搞砸周圍,開在應用程序啓動一個連接並保持它通過應用程序正在運行的整個時間打開。連接池確實在第二次打開和關閉連接後開始。

+0

很高興幫助。 – cmsjr 2009-01-09 19:09:34

0

你提到你試圖追查一個隨機超時問題。我有同樣的,通常當我做一個返回了很多行的SELECT。兩件事情:

Cnn.CursorLocation = ADODB.adUseServer

(另一種選擇是爲adUseClient) - 我相信adUseServer給了我更快的查詢,從而減少超時的情形產生。我相信,在你打開連接之前,你需要這樣做。

Cnn.CommandTimeout = 0

而且在開盤前(),告訴你想無限超時了。我認爲默認的超時時間大約是30秒,對於某些查詢來說太短了。 CommandTimeout將用於Recordset查詢。如果你使用一個Command對象,它有它自己的CommandTimeout成員,它不會從Connection繼承(也就是說,在我執行命令之前設置它)。

對不起,如果語法不是很正確,我正在削減一些C++代碼。