在作一个小东西的时候出现了这个问题,就是使用VS调试几回项目后,使用SQL Server Management Studio管理数据库时,使用SA登陆就会出现这个错误,固然,若是项目中的数据库链接字符串中使用的sa验证,那么项目也会连不到数据库的.但是若是是在 Server Management Studio和项目中使用Windows身份验证,就没有任何问题.
提示错误消息以下
html

超时时间已到。在操做完成以前超时时间已过或服务器未响应。 (.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类没有正确的关闭数据库链接吧.在网上搜了一通,也没有什么实质性的进展web
这里有一个帖子(点我看帖子)反映的状况好像和个人相似,但是他没有说具体的解决方案,仅仅提到优化了一下存储过程数据库
CSDN这里有一个相似问题(点我看原文)大意就是说要把TimeOut时间设的长一点,但是个人不是这个缘由
初步分析缘由为对MSSQL操做时链接超时,知道这事,之前没留意,大概是在配置文件中设置链接时限,在网上找了下解决方法,大多说在数据库链接字符串里解决 服务器
SqlConnection con
=
new
SqlConnection(
"
server=.;database=myDB;uid=sa;pwd=password;
"
)
改成:async
SqlConnection con
=
new
SqlConnection(
"
server=.;database=myDB;uid=sa;pwd=password;Connect Timeout=500
"
)
彷佛没效果。依然运行30秒即报超时!
忽然感受彷佛应该能够在链接数据库代码中指明,式了下con的属性,有个ConnectionTimeout,ide
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请求运行时限间ui
<
system
.web
>
<
httpRuntime
maxRequestLength
="102400"
executionTimeout
="720"
/>
</
system.web
>
这里设置的为720秒,前面的属性maxRequestLength通常用于用户上传文件限制大小!默认通常为4096 KB (4 MB)。spa