3

执行 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 exception, Boolean breakConnection) +2062078 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean 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,


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

4

1 回答 1

16

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

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

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

using (Datacontext context = new Datacontext())
{
    // your code goes here
}
于 2012-04-20T11:12:48.873 回答