3

我有一个 Windows 服务,它每 10 秒连续查询一次 SQL Server 数据库表,我还有一个网站,它也在 25 秒后查询同一个数据库表。

一段时间后我得到异常 - server timeout exception has occurred。我浏览了 stack-overflow 站点并对 SQL 配置设置进行了更改,但仍然遇到相同的异常。该怎么办?

堆栈跟踪

在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data .SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data .SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream,布尔异步)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,字符串方法,DbAsyncResult 结果)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)的 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,String 方法)处 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)处的 RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法)。 Common.DbCommand.ExecuteReader(CommandBehavior 行为)System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,String 方法)处 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)处的 RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法)。 Common.DbCommand.ExecuteReader(CommandBehavior 行为)
在 Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteReader(DbCommand 命令,CommandBehavior cmdBehavior) 在 Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(DbCommand 命令)在 Microsoft.Practices.EnterpriseLibrary.Data.CommandAccessor 1.<Execute>d__0.MoveNext() at System.Collections.Generic.List1..ctor( IEnumerable 1 源)在 System.Runtime.Remoting.Messaging.Message.Dispatch(对象目标,布尔 fExecuteInContext)在 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg,Int32 methodPtr,布尔 fExecuteInContext)1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable

4

1 回答 1

1

给我看代码!超时异常通常是因为您没有关闭数据库连接。

尝试在算法的最后添加代码

if (connection.State == System.Data.ConnectionState.Open)
    {
        connection.Close();
        connection.Dispose();
    }

如果您使用 EnterpriseLibrary,请尝试向 commandTimeOut 添加更多时间

DbCommand dbcommand = database.GetStoredProcCommand("usp_TheStoredProcedureName");
dbcommand.CommandTimeout = 120;
于 2012-10-23T04:56:18.870 回答