http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19533&forum=7
操作が完了する前にタイムアウト期間が…
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14240&forum=7
ロックタイムアウトはDBで発生する事で、SqlCommandの.CommandTimeoutは
コマンドの処理を呼び出し側で打ち切る事
SqlCommand scmd = null;
SqlDataReader sdr = null;
try{
scmd = new SqlCommand();
scmd.Connection = [コネクション取得処理];
scmd.CommandText = "SET LOCK_TIMEOUT 15000";
scmd.CommandTimeout = 20;
scmd.ExecuteNonQuery();
scmd.CommandText = "[SQL文]";
sdr = scmd.ExcecuteReader();
}
としまして、Number=1222のロックタイムアウトをキャッチすることが出来ました。
http://www7.big.or.jp/~pinball/discus/sqls/27657.html
tempdbのトランザクション
そこでSQL Server ログを参照したところ
「データベース 'tempdb' のログ ファイルはいっぱいです。
ログ領域を解放するには、データベースのトランザクション ログを
バックアップしてください。。」
というエラーがありましたので、tempdbのトランザクションログの
バックアップを取ることにしました。
クエリアナライザで
BACKUP LOG
[DB名称]
TO
DISK = N'バックアップファイル名(フルパス)'
WITH
INIT,
NOUNLOAD,
NAME = N'バックアップ名称',
NOSKIP,
STATS = 10,
NOFORMAT
こんなの試してみてはどうでしょう??
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9092&forum=7
件名:ado.net ループ時のinsertについて
ループをしながらあるテーブルへ書込みする時について教えて下さい。
下記の様にループ文を作成し,テーブルへデータ追加をしています。
ここまでは,特に問題ないのですが,その後,SELECT文で同じテーブルへ
SELECTをかけるとどうやら,つかんでいる様でタイムアウトで
おちてしまいます。どうやったら開放できるのでしょうか?
ちなみに,違うテーブルでSELECT文を発行するのはうまくいきます。
ExceptionのMessageは
タイムアウトに達しました。操作が完了する前にタイムアウト期間が
過ぎたか、またはサーバーが応答していません。です。
ちなみにSELECT文前のINSERTをコメントにすると問題なく
処理を行います。
★objConnectをクローズしてからDataReaderを取得したらどうなります?
せっかくtry~catchしていますが、例外が発生したとき、コネクションを
閉じる処理が通らないところにあります。
IDisposableインタフェースを実装するクラスは、ガベージコレクタが管理
しないリソースを使います。したがって、開発者が
「これ、もう要らない」と思った時点で必ずDisposeメソッドをコール
しなければなりません。