0

SQL azure から大量のデータを取得すると、次のエラーが発生します。一時的な障害処理を既に実装していますが、まだこのエラーが発生しています

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ComponentModel.Win32Exception: 待機操作がタイムアウトしました

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[Win32Exception (0x80004005): 待機操作がタイムアウトしました]

[SqlException (0x80131904): タイムアウトが発生しました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) +1789270 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) +5340622 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj、Boolean callerHasConnectionLock、Boolean asyncClose) +244 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsObjParserStateObject 状態, Boolean& dataReady) +1691 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +275 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +1421 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior,Boolean returnStream、String メソッド、TaskCompletionSource1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 完了、String methodName、Boolean sendToPipe、Int32 timeout、Boolean asyncWrite) +208 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +163 System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(SqlCommand cmd、Boolean ignoreInsertPKException、String id) + 98

[HttpException (0x80004005): SQL Server セッション データベースに接続できません。] System.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection conn, Exception e) +235 System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(SqlCommand cmd, Boolean ignoreInsertPKException,文字列 ID) +390 System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext コンテキスト、文字列 ID、SessionStateStoreData 項目、オブジェクト lockId、ブール値の newItem) +589 System.Web.SessionState.SessionStateModule.OnReleaseState(オブジェクト ソース、EventArgs eventArgs) +565 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.34009

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

4

2 に答える 2

0

SqlClient.SqlCommand オブジェクトには CommandTimeout プロパティがあります。デフォルト値は 30 (秒) です。より高い値に設定する必要があります。

于 2014-12-04T11:50:22.373 に答える
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;
于 2016-09-13T15:45:24.547 に答える