ExecuteQueryin linq:超时已过期。操作完成前超时时间已过或服务器无响应

Posted

技术标签:

【中文标题】ExecuteQueryin linq:超时已过期。操作完成前超时时间已过或服务器无响应【英文标题】:ExecuteQueryin linq :Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding 【发布时间】:2012-05-01 23:02:17 【问题描述】:

执行 datacontext.ExecuteCommand(objectname) 时出错

错误:

System.Data.SqlClient.SqlException:超时已过期。在操作完成之前超时时间已过或服务器没有响应。该语句已终止。 示例代码:

Datacontext context = new Datacontext();
tablename tb=new tablename();

string DeleteQuery="delete from table A";
context.ExecuteCommand<tb>(DeleteQuery);
DeleteQuery=string.empty;


string InsertQuery="Insert into table B(a,b,c,d)Select table from C Union All Select Table from D";
context.ExecuteCommand<tb>(InsertQuery);
InsertQuery=string.empty;

在执行插入查询时,我收到错误 System.Data.SqlClient.SqlException: Timeout expired。在操作完成之前超时时间已过或服务器没有响应。该语句已终止。

错误页面如下

“/Portal”应用程序中的服务器错误。

超时。在操作完成之前超时时间已过或服务器没有响应。 该语句已终止。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:超时已过期。在操作完成之前超时时间已过或服务器没有响应。 声明已终止。

来源错误:

第 914 行:其中 ft.IsDeleted = 0 和 ym.IsDeleted = 0 和 ym.IsApproved = 1"); 第 915 行: 第 916 行:dc.ExecuteQuery(InsertCommand); 第 917 行:InsertCommand = string.Empty; 第 918 行:

源文件:d:\Website\IDCCircle_Staging\Portal\Default.aspx.cs 行:916

堆栈跟踪:

[SqlException (0x80131904): 超时。在操作完成之前超时时间已过或服务器没有响应。 该语句已终止。] System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection)+2062078 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection) +5050204 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +234 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+2275 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33 System.Data.SqlClient.SqlDataReader.get_MetaData() +86 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString)+311 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔返回流,布尔异步)+987 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 方法) +32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)+141 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)+12 System.Data.Common.DbCommand.ExecuteReader() +12 System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory 工厂,Object[] parentArgs,Object[] userArgs,ICompiledSubQuery[] subQueries,Object lastResult)+1266 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询,QueryInfo[] queryInfos,IObjectReaderFactory 工厂,Object[] userArguments,ICompiledSubQuery[] subQueries)+113 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)+344 System.Data.Linq.DataContext.ExecuteMethodCall(Object instance, MethodInfo methodInfo, Object[] parameters) +83 System.Data.Linq.DataContext.ExecuteQuery(字符串查询,Object[] 参数)+265 _Default.NHPgridbind() 在 d:\Website\IDCCircle_Staging\Portal\Default.aspx.cs:916 _Default.Page_Load(Object sender, EventArgs e) in d:\Website\IDCCircle_Staging\Portal\Default.aspx.cs:97 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,对象 o,对象 t,EventArgs e)+14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,EventArgs e)+35 System.Web.UI.Control.OnLoad(EventArgs e) +91 System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207


版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.272

【问题讨论】:

【参考方案1】:

如果表 C 和 D 包含很多行,则运行插入可能需要比默认命令超时(30 秒)更长的时间。在插入命令之前添加这一行:

context.CommandTimeout = 240  // set timeout to 4 minutes

顺便说一句,你应该在完成后处理上下文。最简单的方法是:

using (Datacontext context = new Datacontext())

    // your code goes here

【讨论】:

以上是关于ExecuteQueryin linq:超时已过期。操作完成前超时时间已过或服务器无响应的主要内容,如果未能解决你的问题,请参考以下文章

sql 2000 超时已过期?怎么办!? 呼唤高手!

SqlException:超时已过期

发生错误 1042:连接超时已过期

SchemaModel.SqlSpatialIndex:超时已过期

MySql.Data.MySqlClient.MySqlException:超时已过期

优化实体框架查询 - 超时已过期