2017-11-27 26 views
0

データ・テーブルのデータをテーブル(db2)に挿入するために、Db2BulkCopyクラスのWriteToServer()メソッドを.netプロジェクトで使用します。私は私が処理する方法がわからない非常に一般的なエラーました:現在のトランザクションがあるため、エラー\のロールバックされたBULKをDataTableからDB2に挿入するときのエラー

" - \ 952" を { "ERROR [40506] [IBM] [DB2/LINUXX8664] SQL1476N現在のトランザクションはエラー "\ 952 \"によりロールバックされました。 "}

データベース表にレコードを手動で追加しようとしましたが、すべて正常に動作しました。 これまでに遭遇した場合は、いくつかのヒントを提供してください。ありがとう!

答えて

2

コード-952のSQL1476Nは一般的ではありません。かなり特殊ですが、sqlcode -952(別名SQL0952N)の意味を検索しなければなりません。

Db2クライアントは、.Netのデフォルトが完了するまで30秒間待機する可能性があるため、タイムアウトしています。大量のコピーを完了させるのに長い時間待つように.Netに指示する必要があります。 .Netに永遠に待つように指示することもできます。

デフォルトのクエリタイムアウトを変更するメカニズムは、Db2クライアントのバージョンやコーディング手法によって異なります。 Db2クライアントまたはコード内のクラスのインスタンスにQueryTimeout = 0プロパティを追加する必要があります。

旧バージョンのDb2クライアントには、このプロパティを指定できるdb2cli.iniがあります。現行バージョンには、このプロパティーを指定できるdb2dsdriver.cfgファイルがあります。また、データベース接続文字列でプロパティを指定することもできます。また、BulkCopyを実行する前にコード内の関連するプロパティを明示的に設定することもできます。

0

タイムアウトが変更され、問題が再度表示されました。これは、関連するテーブルに外部キーがないことが原因であると思われます。 すべてありがとう!