2014-12-04 326 views
-1

从sql azure中检索大量数据时出现以下错误。我已经实现了瞬态故障处理,但仍然出现此错误等待操作超时Win32Exception(0x80004005):等待操作超时azure

说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。

异常详细信息:System.ComponentModel.Win32Exception:等待操作超时

源错误:在当前web请求的执行过程中生成

未处理的异常。关于异常的来源和位置的信息可以使用下面的异常堆栈跟踪来标识。

堆栈跟踪:

[Win32Exception(0X80004005):等待操作超时]

[SQLEXCEPTION(0x80131904):超时过期。在操作完成之前已经超时或服务器没有响应。] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,操作1 wrapCloseInAction) +1789270 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)+5340622 System.Data.SqlClient.TdsParser .ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)244 System.Data.SqlClient.TdsParser.TryRun(runBehavior runBehavior,SqlCommand的cmdHandler,SqlDataReader的数据流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)1691 System.Data .SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+275 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBe行为cmdBehavior,RunBehavior runBehavior,布尔returnStream,布尔异步,Int32超时,任务&任务,布尔asyncWrite,SqlDataReader ds)+1421 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,String方法, TaskCompletionSource 1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource 1完成,字符串方法名,布尔sendToPipe,的Int32超时,布尔asyncWrite)208 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()163 System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(CMD的SqlCommand,布尔ignoreInsertPKException, String id)+98

[HttpException(0x80004005):无法连接到SQL Server会话数据库。] Syst em.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection的康恩,例外五)235 System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(CMD的SqlCommand,布尔ignoreInsertPKException,字符串ID)390 System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive (HttpContext上下文,String id,SessionStateStoreData项,Object lockId,Boolean newItem)+ 589 System.Web.SessionState.SessionStateModule.OnReleaseState(Object source,EventArgs eventArgs)+565 System.Web.SyncEventExecutionStep.System.Web.HttpApplication。 IExecutionStep.Execute()+136 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔型&已同步完成)+69

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

http://i.stack.imgur.com/8BloW.png

回答

0

的SqlClient.SqlCommand对象具有属性的CommandTimeout。它的默认值是30(秒)。您应该将其设置为更高的值。

+0

完成相同但仍然错误提示 – 2014-12-04 12:02:59

0

您可以将超时值设置得更高,也可以关闭超时值,就像我在下面的代码中所做的那样。请注意,如果保存数据的对象超过2Gb,则可能会遇到错误。您可能需要考虑重新设计您的查询,以便一次处理更小的数据块。

// I'm populating an ADO.Net DataTable for this demo but populate whatever object you'd like 
DataTable DtFromSQL = new DataTable(); 
SqlConnection myConnection = new SqlConnection("ConnectionString"); 
myConnection.Open(); 
SqlDataReader myReader = null; 
SqlCommand myCommand = new SqlCommand("enter some SQL query here", myConnection); 
// A CommandTimeout Value of 0 turns the timout off, otherwise you can set it to some value in seconds 
myCommand.CommandTimeout = 0; 
myReader = myCommand.ExecuteReader(); 
DtFromSQL.Load(myReader8); 
myConnection.Close(); 
DtFromSQL;