2012-07-06 22 views
0

我有一個非常簡單的服務,一直以前能用,但現在我把它升級到較新的.NET版本,它已停止,像這樣的錯誤消息的工作:SQL超時

超時過期。在從池中獲取 連接之前已經超時。可能發生了這種情況,因爲所有連接池都正在使用中,並且已達到最大池大小。

我試圖執行存儲過程,該服務試圖運行並直接在MS運行它sql服務器管理工​​作室需要少於1秒,所以我不明白什麼是可能的問題?使用相同數據庫的客戶端(不是相同的存儲過程)在同時使用它們時沒有任何超時問題。

編輯,所以你可以看到代碼:

在服務啓動時這就是所謂的:

Private Sub SetupGetBatch1Command() 
    GetBatch1Command = New System.Data.SqlClient.SqlCommand("spgetTheData1") 
    GetBatch1Command.CommandType = Data.CommandType.StoredProcedure 
End Sub 

這有一定的時間間隔:

Private Function GetBatch1() As DataSet 
    Dim dataset As New DataSet 
    Dim adapter As Data.SqlClient.SqlDataAdapter 
    Dim cn As New System.Data.SqlClient.SqlConnection(connectionstring()) 
    GetBatch1Command.Connection = cn 
    adapter = New Data.SqlClient.SqlDataAdapter(GetBatch1Command) 
    adapter.Fill(dataset) 
    Return dataset 
End Function 

我沒有這樣做並不太瞭解它,但我想我至少應該遵循下面的建議並在某處添加cn.dispose()?

還有其他類似的數據庫連接,所有的連接都與上面的例子完全相同。

+0

你從服務運行時分析了查詢嗎? – 2012-07-06 08:57:52

+0

你可以發佈你的連接字符串嗎?其他客戶端是否使用相同的連接字符串? – Thomas 2012-07-06 09:09:25

+2

@Micke在完成使用後,您是否正確地處理了連接和命令?爲了讓SO人員能夠提供幫助,您可能需要在代碼中顯示您調用存儲過程的代碼... – user1429080 2012-07-06 09:20:33

回答

1

這幾乎總是無法處理/關閉連接對象的結果。通過您的代碼去,並確保所有的SqlConnection的物品設置,最好用using聲明:

using (SqlConnection c = new SqlConnection(...)) 
{ 
    // use the connection... 
    ... 
} // c.Dispose() will be called automatically here, even if an exception is thrown. 

我懷疑升級到一個新的.NET版本是紅色鯡魚,或只是間接引起的問題:例如,您可能會收到以前沒有收到的異常,並且在拋出異常時,您的代碼可能無法正確處置/關閉連接。