Windows服务SQL超时异常

时间:2012-10-23 04:47:02

标签: asp.net .net sql-server-2008 windows-services

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

一段时间后,我得到例外 - server timeout exception has occurred。我经历了堆栈溢出站点并完成了对SQL配置设置的更改但仍然得到了相同的异常。怎么办?

堆栈跟踪

  

at System.Data.SqlClient.SqlConnection.OnError(SqlException   exception,Boolean breakConnection)at   System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   System.Data.SqlClient.SqlDataReader.ConsumeMetaData()中的stateObj)   在System.Data.SqlClient.SqlDataReader.get_MetaData()at   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,   RunBehavior runBehavior,String resetOptionsString)at   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean   async)at   System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String   方法,DbAsyncResult结果)at   System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String   方法)at   System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior   行为,String方法)at   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior   行为)   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
  在   Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteReader(的DbCommand   命令,CommandBehavior cmdBehavior)at   Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(的DbCommand   命令)at   Microsoft.Practices.EnterpriseLibrary.Data.CommandAccessor 1.<Execute>d__0.MoveNext() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1个来源)         at System.Runtime.Remoting.Messaging.Message.Dispatch(Object target,Boolean fExecuteInContext)at at   System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(即时聊天   msg,Int32 methodPtr,Boolean fExecuteInContext)

1 个答案:

答案 0 :(得分:1)

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

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

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

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

DbCommand dbcommand = database.GetStoredProcCommand("usp_TheStoredProcedureName");
dbcommand.CommandTimeout = 120;