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: where ft.IsDeleted = 0 and ym.IsDeleted = 0 and 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 例外、Boolean breakConnection) +2062078 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 例外、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 に答える