2012-04-07 9 views
2

DataTableに12,000行あり、WriteToServerにしようとするとタイムアウトしました。一度にすべてではなく一度にデータベースにDataTableの一部を書き込む方法はありますか?私は現時点で私のデータベースとのインターネット接続が悪いです。一度に500行しか書き込めない場合は、タイムアウトを避けることができます。これを行う方法はありますか?SQLBulkCopy.WriteToServer DataTableは、データの一部をテーブルに書き込む方法ですか?

+0

ソースストリームがあなたのコントロールの下でなければなりませんそれとSQLBulkCopyの間のコード)。行を500に数えて、ソースを切り捨ててください。 – RBarryYoung

答えて

3

あなたがのBatchSize行が処理されたとき、バッチが完了しSqlBulkCopy.BatchSize

を見てみなければならないか は、宛先データ・ソースに送信するこれ以上の行があります。

ゼロ(デフォルト)は、各WriteToServer操作が単一バッチ であることを示します。

SqlBulkCopyインスタンスが有効な UseInternalTransactionオプションなしで宣言されている場合は、行が一度にサーバー のBatchSize行に送信されますが、何のトランザクション関連アクションは取られません。 UseInternalTransactionが有効な場合、行の各バッチは別のトランザクションとして に挿入されます。

BatchSizeプロパティは、いつでも設定できます。バルクコピーが既に進行中の である場合、現在のバッチは、前のバッチサイズの に従ってサイズが変更されます。後続のバッチは新しいサイズを使用します。 BatchSizeが最初はゼロであり、WriteToServer 操作がすでに進行中の間に変更された場合、その操作はデータを 単一バッチとしてロードします。同じ SqlBulkCopyインスタンス上の後続のWriteToServer操作は、新しいBatchSizeを使用します。

リファレンスhere

+0

ありがとう!それはうまくいった!ご助力ありがとうございます!!あなたは命の恩人です! – user840930

+0

問題ありません。 @ user840930:答えが良いと思うなら、upvoteを忘れないでください。それは私たちに暖かく曖昧な気持ちを与えます:P – Arion

+0

それをしました!再度、感謝します! – user840930

0

私は同じ問題を抱えていた、私は単にそれがこのようにやって解く:それは、その後でない場合(独自のものを挿入し

Dim strConnection as string="myconnectionstring" 
Dim sqlBulk As New SqlBulkCopy(strConnection) 
sqlBulk.BulkCopyTimeout = 0 
関連する問題