2011-08-05 9 views
1

.NET 4でオンラインツールを開発して、ExcelページをDataTableに読み込み、SqlBulkCopy.WriteToServer()を使用して一致するSql Server 2000(すぐに2008になる)テーブルにアップロードします。それは私の会社内での使用のためだけであるので、私は外部使用のためにそれを確保することについてあまり心配する必要はありません。SqlBulkCopyは通常のバルク挿入の方法ですか?

私はそれが夢のように働いていて、以前は私が行っていた行単位の挿入よりもはるかに速いのです。しかし、今私はそれが正しいアプローチであるかどうか自分に尋ねています。

第1に、ビジネスの観点からは、他のすべてのデータアクセスは、ユーザーにexecアクセス権を付与したストアドプロシージャによるものですが、これにはテーブルレベルのセキュリティが必要です。

第2に、ほとんどのオンラインドキュメントには、毎日の使用ではなく、1つのオフオペレーションのためのツールのほうが多いことが書かれています。

SqlBulkCopyを使用した場合のネガには、多くの言及がありません。私が心配すべきセキュリティ上の問題やその他の問題はありますか?私が検討できる代替アプローチはありますか?すべてと同様に、私の主な目的は、セキュアで正しい方法で、可能な限り迅速に作業することです。

多くのありがとうございます。

答えて

1

私はあなたがこの選択肢でうまくいると言いたいと思います。これは、通常のコマンド、バッチ処理以外の呼び出しを伴う標準のinsert文よりもパフォーマンス上の利点を得るために使用されています。これが、ストアドプロシージャの「標準」アプローチとは異なる理由です。

私は、単に入力を検証するだけではセキュリティはそれほど心配しないと言います。あなたがそれをやっているように見えるのは、テーブルに直接データを転送していて、サイドに沿ってカスタムSQLを実行していないということです。

これを複数回実行する場合は、複数の場所で大量のデータを処理するための実動コードで複数回使用します。パフォーマンス上のメリットは、取得するために使用するわずかに異なるDALコードよりも優れています。

唯一の潜在的な問題はメモリ圧です。オブジェクトグラフからDataTableを作成すると、そのデータの2番目のコピーがメモリに格納されます(albiet、short lived)。いくつかの場所では、DataTableを使用してコードを変更して、オブジェクトグラフ上にIDataReaderを実装するカスタムクラスを使用しています(グラフ、通常は2つのフラットリスト)。これにより、メモリの負荷が軽減されます。

+0

アダムありがとう - 私が探していたものです。 –

+0

@Kurt問題ありません。私が示唆できるのは、基準の違いが何であるかを何らかの形で文書化することだけです。残念ながら、私たちはほとんど意味を持たず、伝統を壊すコードをたくさん持っています。誰かが特定の人によって、説明のない変更の理由でパフォーマンス/バグフィックス/ハックのために行われたことを知るだけです。 –

関連する問題