彼らはラジオで長い時間の聴取者の最初の呼び出し元で言うように....DataReaderとSQLCommand
ここに私の問題です。 VS 2005 SQL Server 2005データベース。 Windowsフォームアプリケーション。 C#。大きなテーブル - 780Kレコード。私はそれをソーステーブルと呼ぶことにする。ソース表をループする必要があり、レコードごとに別の表を使用して何らかの処理を行い、完了したソース表に書き戻します。私はまだ2番目のテーブルを更新するまではありませんでした。
接続オブジェクトAを使用してデータテーブルを使用してソーステーブルのすべてのレコードをループします。各レコードについて、ソーステーブルを更新する更新文を作成しますこのレコードが処理されたことを示すために、このオブジェクトを処理するために接続オブジェクトBに対してSQLコマンドを使用します。私はdataReaderが排他的なものを望んでいるので、異なる接続オブジェクト。
ここが問題です。 Xレコード(Xが約60と思われる)を処理した後、更新タイムアウトが発生します。これを書いている間
- これが起こった面白いかそうではありません - 私の脳は、これはトランザクションの分離および/またはロック...すなわちで行うことです私に語りました。私は、データレアヤーを使用してソースレコードを読み込んでいますが、それらのレコードを変更しています...これは、異なるトランザクションの分離で問題を引き起こすことがわかりますので、そのことを見ていきます...
誰でもこれを見て解決方法を知っていますそれ?あなたは、コマンドオブジェクトのコマンドタイムアウトproperyを設定する必要がありますように
乾杯
ピート
データベース内でそれを行うことはできません - 私はC#で書いておきたい第2のテーブルを更新しているREのトンです。すでにいくつかのコードがあります。私はここに戻ってくる前にノーロックを試みましたが、それが問題を解決しました。次の質問はなぜですか?nolockで読者が使用しているクエリを実行しても作者がブロックされないため、ノーロックを使用しないときに、ソースレコードがデータウェアハウスの間ロックされています。 –
はい、レコードは読み取りのために共有ロックでロックされている可能性があります(つまり、読み取り時間が一定であることを保証するため)。ロックされたレコードは更新できません。他の接続ではレコードを表示できますが、変更しないでください。 –