請在回答之前閱讀完整的問題。我很抱歉,我似乎從來沒有寫過簡短的問題......SQL Server連接超時以及在命令和連接對象中使用語句
我正在支持一個C#內部Web應用程序,該應用程序在Windows Small Business Server 2011 SP1框上運行SQL Server 2008 R2。
我們已經得到了很多SQL的超時最近,這裏有一個例子例外:
System.Web.HttpUnhandledException:類型System.Web.HttpUnhandledException「的異常被拋出。 ---> System.InvalidOperationException:超時過期。在從池中獲取連接之前已超時。發生這種情況的原因可能是因爲所有連接池都在使用中,並且達到最大池大小。 在System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection owningConnection) 在System.Data.ProviderBase.DbConnectionClosed.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory的) 在System.Data.SqlClient.SqlConnection.Open()
我檢查了一些事情,其中之一就是代碼如何處理連接和關閉連接。我已經在其他線程中讀過,在你的連接中使用Using語句是足夠的,因爲它「......將try ... finally中的連接創建並最終將連接處理調用放到finally中」。即使發生異常,連接也會關閉。
因此,我同意並使用該方法多年。即使在連接中使用Using語句時,其他人也建議顯式關閉連接。我認爲這將是多餘的......但是,我的問題是關於命令對象。其他人爲這個應用程序編寫了一個大型的db方法庫,並且它們(在所有的db方法中)在使用SqlConnection對象的語句之前聲明瞭SqlCommand對象。他們還在連接使用語句之前將連接對象分配給命令對象。
更好的做法是在連接使用語句中聲明和使用命令對象,並且可以通過另一種方式導致sql連接超時(禁止其他原因的sql連接超時)?拿這個代碼,例如:
也知道調用頁面都嘗試在他們漁獲物和它是錯誤記錄到我們的日誌數據庫的頁面。我們讓異常冒泡到頁面上的調用方法,並在那裏處理。
Using語句應該關閉連接,是不是正確? – Kershaw
另外,主要問題是,如果命令對象在連接使用塊內部聲明和使用?不能這樣做有問題嗎? – Kershaw
'Dispose'關閉連接並將其返回到池中。 –