2016-06-30 7 views
1

私のアプリケーションにはプログレスバーが必要です。 SQL Serverにテキストファイルを使用してデータをアップロードしていますが、時間がかかり、バックグラウンドワーカーも同じに使用していますが、正しく動作しないため、SQLバルクコピーでプログレスバーを使用できる方法はありますか2000レコードが挿入されていると私に伝えます。私は本当にあなたの回答に感謝SQLBulkcopyでプログレスバーが必要

public void bulkinsert(string tablename, DataTable dt) 
    { 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlBulkCopy blkcopy = new SqlBulkCopy(con); 
     blkcopy.DestinationTableName = tablename; 
     blkcopy.BatchSize = dt.Rows.Count; 
     blkcopy.BulkCopyTimeout = 1500; 
     blkcopy.WriteToServer(dt); 
     blkcopy.Close(); 

    } 

: はここに私のコードです。

+0

を使用することになり、私は、ユーザーがそれが何かをやって知らせ、多分タイマーで、この場合にはロードホイールを使用してお勧めします。それ以外の場合、プログレスバーの精度は恐ろしいものになり、ユーザーは99%で固まってしまえば間違っていると思うでしょう。 < - マイクロソフトは、これをすべて時間通りに行うために使用されていました。 – FirebladeDan

+0

SqlBulkCopyクラスのNotifyAfterプロパティを使用して通知しきい値を指定し、SqlRowsCopiedイベントをキャッチしてプログレスバーを更新します。参照してください:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx – Kevin

答えて

2

あなたは

がられるNotifyAfter プロパティで指定した行数が処理されたことをするたびに発生しSqlBulkCopy.SqlRowsCopiedイベントを処理する必要があります。

私も非同期待つを使用してProgress<T>の代わりに、バックグラウンドワーカー

+0

ありがとう! @Conrad Frix ..それは本当に役立ち、私のアプリケーションはうまく動いているので、時間の経過とともに処理されているレコードを見ることができます。私はちょっとあなたのために質問をしています。それは、プロパティの後に通知を使用するときにプロセスを遅くしましたか? –

+0

'System.Diagonistcs.Stopwatch'を使用して、SqlRowsCopiedを処理するかどうかにかかわらずテストし、その違いを確認することができます。違いがある場合は、プログレスバーを持つ価値があるかどうかユーザーに尋ねることができます –

+0

はい、私はストップウォッチでチェックしました...プロセスで2〜3分遅れましたが、それはごくわずかですおとこ! –

関連する問題