1

地理コードデータをcsvファイルからデータベースにインポートしています。

次のライブラリを使用しました 。高速のcsvリーダーを使用してcsvを読み取り、SqlBulkCopyを使用しました。

これが私がインポートしているデータの例です

"AB10","1BH","L",0,0,,,20
"AB10","1BR","L",39320,80570,57.14214,-2.11400,21

良好なデータでは問題なく動作しますが、データベースがnull値を受け入れないように設定されているため、一番上の行では例外がスローされます。

不正なデータを無視するようにバルクコピーに指示する方法はありますか?ライブラリの組み込みプロパティを使用して、csvリーダーに不正な行を無視させようとしましたが、機能していないようです。

csv.SkipEmptyLines = true;
csv.MissingFieldAction = MissingFieldAction.ParseError;
csv.DefaultParseErrorAction = ParseErrorAction.AdvanceToNextLine;

別のオプションは、csvを事前に解析し、問題のある行をすべて削除することだと思います。おそらく、.net用のより良いcsvライブラリがありますか?

4

3 に答える 3

1

csvリーダーコードを投稿していただければ、さらにサポートさせていただきます。しかし、リンクされたページのコードを見ると、次のようなことができます。

while (csv.ReadNextRecord())
    {
        for (int i = 0; i < fieldCount; i++)
            Console.Write(string.Format("{0} = {1};",
                          headers[i],
                          csv[i] ?? "null"));
        Console.WriteLine();
    }

そのnull合体演算子をどこに追加したかわかりますか?これにより、出力が次のように変更されます。

"AB10","1BH","L",0,0,,,20

"AB10","1BH","L",0,0,null,null,20
于 2012-10-08T15:19:13.717 に答える
0

Microsoft Text Driverを使用して、プロジェクトのCSV情報をインポートしました。それはかなりうまくいきました。Schema.iniファイルを定義して、列ヘッダー、データ型、スキャンする行数を指定しました(MaxScanRows = 0、ファイル全体をスキャンします)。

私はこれを試していませんが、Microsoft Text Driverを使用して、csvファイルからデータを引き出すためにselectクエリを発行する場合、nullレコードを除外するための基準を追加できるかどうか疑問に思います。

SqlBulkCopy.WriteToServer(IDataReader)で使用するために.csvからIDataReaderを設定する方法

http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353(v=vs.85).aspx

http://www.connectionstrings.com/textfile

お役に立てれば。

于 2012-10-08T15:03:22.710 に答える
0

nullエントリを処理するために、最終的にcsvを一度に1000エントリのDataTableオブジェクトに解析し、その後、それらをインポートしました。

于 2012-10-19T12:41:37.513 に答える