在做一個小東西的時候出現了這個問題,就是使用VS調試幾次項目後,使用SQL Server Management Studio管理資料庫時,使用SA登錄就會出現這個錯誤,當然,如果項目中的資料庫連接字元串中使用的sa驗證,那麼項目也會連不到資料庫的.可是如果是在 Server Management S ...
在做一個小東西的時候出現了這個問題,就是使用VS調試幾次項目後,使用SQL Server Management Studio管理資料庫時,使用SA登錄就會出現這個錯誤,當然,如果項目中的資料庫連接字元串中使用的sa驗證,那麼項目也會連不到資料庫的.可是如果是在 Server Management Studio和項目中使用Windows身份驗證,就沒有任何問題.
提示錯誤消息如下
Code
超時時間已到。在操作完成之前超時時間已過或伺服器未響應。 (.Net SqlClient Data Provider)
------------------------------
有關幫助信息,請單擊: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476
------------------------------
伺服器名稱: ZY-CQU
錯誤號: -2
嚴重性: 11
狀態: 0
------------------------------
程式位置:
#region 程式信息
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
在 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 bytesExpected)
在 System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
在 System.Data.SqlClient.TdsParserStateObject.ReadByte()
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.SqlClient.SqlConnection.Open()
在 Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ObjectExplorer.ValidateConnection(UIConnectionInfo ci, IServerType server)
在 Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()
#endregion 程式信息
初步推斷可能是由於我的那個DBAcess類沒有正確的關閉資料庫連接吧.在網上搜了一通,也沒有什麼實質性的進展
--------------------------------------------------------------------------------
這裡有一個帖子(點我看帖子)反映的情況好像和我的類似,可是他沒有說具體的解決方案,僅僅提到優化了一下存儲過程
--------------------------------------------------------------------------------
CSDN這裡有一個類似問題(點我看原文)大意就是說要把TimeOut時間設的長一點,可是我的不是這個原因
初步分析原因為對MSSQL操作時連接超時,知道這事,以前沒留意,大概是在配置文件中設置連接時限,在網上找了下解決方法,大多說在資料庫連接字元串里解決
SqlConnection con = new SqlConnection("server=.;database=myDB;uid=sa;pwd=password;")
改為:
SqlConnection con = new SqlConnection("server=.;database=myDB;uid=sa;pwd=password;Connect Timeout=500")
似乎沒效果。依然運行30秒即報超時!
突然感覺似乎應該可以在連接資料庫代碼中指明,式了下con的屬性,有個ConnectionTimeout,
SqlConnection con = new SqlConnection("server=.;database=myDB;uid=sa;pwd=;");
con.ConnectionTimeout = 180;//報錯,屬性ConnectionTimeout 為只讀!
嘗試失敗,再接著看command對象屬性,發現其也有類似屬性!CommandTimeout設置一下:
SqlCommand cmd = new SqlCommand();
cmd.CommandTimeout = 180;
再運行,即解決,這裡設置的時間的180秒,即三分鐘!可根據需要設置,如果過長,也可以設置為0,當此屬性設置為0時表示不限制時間。此屬性值應該慎用。還需要在Web.config配置文件中設置http請求運行時限間
<system.web>
<httpRuntime maxRequestLength="102400" executionTimeout="720" />
</system.web>
這裡設置的為720秒,前面的屬性maxRequestLength一般用於用戶上傳文件限制大小!預設一般為4096 KB (4 MB)。
解決方法,可以照下圖片的步驟來實現。原來值是600秒,改為0即可。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ulark/archive/2010/01/18/5208779.aspx
ps:本人小白一枚,對sql優化極不瞭解,希望大家可以推薦一些優化sql的博客!