运行sql脚本时VB.NET中的超时错误

时间:2011-01-20 18:25:16

标签: sql vb.net sql-server-2008

我想知道是否有人可以帮我解释为什么我从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

2 个答案:

答案 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

我还会检查您的查询执行计划,以确定是否进行了一些表扫描,导致查询效果不佳。