1

CSV ファイルをデータベース テーブルにインポートするアプリケーションを作成しました。複数の CSV ファイルを SQL Server データベースのテーブルにインポートする必要があります。

いくつかのアプローチを念頭に置いていますが、どれが最も実用的かはわかりません。このアプリケーションは、(ローカル ファイル システムから) インポートするファイルを選択するようユーザーに要求し、ユーザーは[Load Files]ボタンをクリックするだけです。これらのファイルには、100,000 行以上が含まれる場合があります。

上記のシナリオでは何が良いでしょうか?

  1. C# とオープンソースのGenericParserを使用して CSV ファイルをデータテーブルにインポートし、BulkCopy の従来の方法を使用してデータテーブルをデータベースにプッシュします。

    :私の懸念は、100,000行以上のファイルに対してこれを行うと、ユーザーのPCに負担がかかることです。これは処理にどのように影響しますか、またはプログラムをクラッシュさせますか?

  2. ファイル名とパスを必要とする一括挿入を使用します。このオプションに関する私の懸念は、サーバー上に物理ファイルが配置されていない状態で、サーバーが一括挿入コマンドを処理できるかどうかわからないということです。ファイル パスは、ユーザーのローカル マシンに関連付けられます。一括挿入を使用したのは、サーバー自体にログオンしたときだけで、このアプリでは使用できません。

  3. Linqでそれを行う方法はありますか? 私はLinqに精通していませんが、それが達成できるかどうかはわかりませんが、試してみることはできます.

どんな洞察も高く評価されます。何をする必要があるかはわかっていますが、実際にそれを達成する方法がわかりません。

ありがとう

4

3 に答える 3

1

私のお勧めは、.NET でSqlBulkCopyクラスを使用することです。BULK INSERT ステートメントとほぼ同じ速さで行をインポートできますが、DataTable に行を入力してから SQL Server に送信するだけで済みます。

CSV ファイルをインポートするためのコマンドレットが組み込まれている C# の代わりに、PowerShell を使用することも検討する必要があります (単純なファイル インポート プログラムでは、これが個人的にお気に入りです) 。かなりクールなもの。

于 2012-09-20T17:17:18.540 に答える
0

1)一般的に、.Netのローダーアプリは良い選択です。特に単純なロードの場合、100,000行は実際には激しいワークロードではありません。その場で値を検索するために多数の複数のテーブル結合が関係している場合にのみ、それは本当に大きな懸念事項になります。

2)厳密に言えば、物理ファイルの場所はパフォーマンスの問題にすぎませんが、私はそれを行いません。それは管理上の頭痛の種を紹介します。

3)Linqの経験がないので、発言できません。

ボーナスの代替案として、IISをどこかで実行している場合、おそらくDBサーバー上でも、DBへのODBC接続を備えたCGIスクリプトである軽量の1ページの「webapp」を作成でき、ユーザーはフィードするだけです。 「Web/CGI」アップロードとしてのCSV。この方法でユーザーワークステーションにインストールするユーティリティアプリケーションはありません。

于 2012-09-20T17:24:08.477 に答える
0

問題を解決するには、次の 2 つの基本的なビューで確認する必要があります。

  1. データベースに挿入する前に、データを操作する必要がありますか (集計、修正など)。はいの場合、ファイルからオブジェクトに行をアップロードする最良の方法は次のとおりです (各行を 1 つのオブジェクト インスタンスに)。そして、Linq を使用してアイテムのリストをエレガントに移動できます。

  2. ファイルからデータベースに行をそのまま挿入するだけでよいですか? この場合、質問のポイント 2 に記載されているプロセスを使用します。

アクションの前にファイルをサーバーにアップロードしたいと思います。より安全です。

于 2012-09-20T17:33:04.047 に答える