質問: 私はADO.NetでSqlClientのSqlBulkCopyを研究しており、以下の質問があります。 膨大な数のレコードでトランザクションの一部として実行されている**SqlBulkCopy**操作中にネットワークエラーが発生した場合はどうなりますか? 私たちが手動でそれを殺すまで、トランザクションはサーバ内でオープン(未コミットもロールバックもされていません)のままになりますか? それぞれのSQL Serverテーブル(InvoiceHeader、InvoiceDetails)に、DataSetの2つのDataTable(InvoiceHeader、InvoiceDetails)で多数のレコードを送信するための最良の方法は何ですか? ありがとうございました。 編集: 私が追加したいと思ったいくつかの詳細は、忘れてしまった: これは.Net v3.5用です。私はすべてのデータベースのやりとりのためにエンタープライズライブラリを使用しています。
回答: あなたはのTransactionScopeを使用していると仮定すると、m個のYの理解が無いということである SQL Serverは、周囲のトランザクションを検出し、自動参加しますので、トランザクションは、開いたままにされることはありません。これは、最悪の場合、トランザクションがタイムアウトしてロールバックすることを意味します。 トランザクションバインディングを変更して、タイムアウトが発生した場合の対処方法を指定することができます(明示的にバインドを解除する必要があります)。