SQLを実行するときに長く時間がかかるとタイムアウトするわけです。トランザクションをしながら実行すると、トランザクションもタイムアウトすることがあります。
SQLコマンドがタイムアウトしたときに起きる例外のメッセージは、以下の通り。
「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」
トランザクションがタイムアウトしたときに起きる例外のメッセージは、以下の通り。
*追記(2018/6/22)
タイムアウトを20分まで延ばすとしたら、下記のように指定する。
アプリで20分と延ばしても、10分で切れるのですけどね。
MachineSettingsSection.MaxTimeout プロパティ
このプロパティで20分と設定すればいけるのかしら???
SQLコマンドがタイムアウトしたときに起きる例外のメッセージは、以下の通り。
「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」
「現在の接続と関連付けられているトランザクションは完了しましたが、破棄されていません。トランザクションは、接続が SQL ステートメントの実行に使用される前に破棄されなければなりません。」
*
トランザクションは、原則、10分でタイムアウトするみたい。アプリ側から1時間までと時間を延ばしても効かない。パソコンの設定ファイルに追記すれば延ばせるみたいだが、勝手に追記するのがNGの場合は、どうしようもない。
逆にいえば、トランザクションが10分もかかるのは異常事態ということでよいのかもしれない。いやいや、100万行データを更新するのに10分では終わらないぞ、、、という場合は、パソコンの設定ファイルに追記するしかない。システム管理に要相談となる。
*追記(2018/6/22)
タイムアウトを20分まで延ばすとしたら、下記のように指定する。
using (TransactionScope tr = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(20.0))) // 20分待ち
{
using (SqlConnection cn = いろいろ)
{
cn.Open();
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.CommandTimeout = 60 * 20; // 20分待ち
cmd.ExecuteNonQuery();
cn.Close();
}
tr.Complete();
}
アプリで20分と延ばしても、10分で切れるのですけどね。
MachineSettingsSection.MaxTimeout プロパティ
このプロパティで20分と設定すればいけるのかしら???
コメント
コメントを投稿