我想知道是否有人可以帮我解释为什么我从SQL Server 2008 R2中创建的简单存储过程中收到此错误。我试图获取数据并将其插入临时表。如果是超时问题,如何将超时长度增加到420秒。根据我的理解,超时只有30秒。
这是完整的错误:
服务器错误。超时已过期。操作完成之前经过的超时时间或服务器没有响应。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:超时已过期。操作完成之前经过的超时时间或服务器没有响应。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
堆栈追踪:
[SqlException(0x80131904):超时已过期。操作完成之前经过的超时时间或服务器没有响应。] System.Data.SqlClient.SqlConnection.OnError(SqlException exception,Boolean breakConnection)+1951450 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,Boolean breakConnection)+4849003 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)+194 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+2394 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()+ 33 System.Data.SqlClient.SqlDataReader.get_MetaData()+ 83 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+297 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)+954 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,DbAsyncResult result)+162 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method)+32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)+141 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)+12 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)+10 System.Data.Common.DbDataAdapter.FillInternal(DataSet数据集,DataTable [] datatables,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand命令,CommandBehavior行为)+130 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand command,CommandBehavior behavior)+287 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,String srcTable)+92 System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)+1297 System.Web.UI.WebControls.BaseDataList.GetData()+38 System.Web.UI.WebControls.DataList.CreateControlHierarchy(Boolean useDataSource)+153 System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e)+54 System.Web.UI.WebControls.BaseDataList.DataBind()+55 System.Web.UI.WebControls.BaseDataList.EnsureDataBound()+ 60 System.Web.UI.WebControls.BaseDataList.CreateChildControls()+ 69 System.Web.UI.Control.EnsureChildControls()+87 System.Web.UI.Control.PreRenderRecursiveInternal()+ 44 System.Web.UI.Control.PreRenderRecursiveInternal()+171 System.Web.UI.Control.PreRenderRecursiveInternal()+171 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+842
版本信息:Microsoft .NET Framework版本:2.0.50727.4952; ASP.NET版本:2.0.50727.4955
答案 0 :(得分:3)
Dim cmd = connection.CreateCommand()
cmd.CommandTimeout = 420
使用CommandTimeout属性。
答案 1 :(得分:1)
在ASP代码中设置超时
VB.NET:
Dim objCmd = conn.CreateCommand()
objCmd.CommandTimeout = 420
或经典:
set con = createObject("ADODB.Connection")
con.open connectionString
con.commandTimeout = 420
我还会检查您的查询执行计划,以确定是否进行了一些表扫描,导致查询效果不佳。