0

ASP.NET イントラネット ページを使用して、毎月 SQL Server にインポートする必要があるタブ区切りのテキスト ファイルがいくつかあります。ここにある汎用パーサーを使用してファイルを DataTables にインポートし、列マッピングを使用して SqlBulkCopy を使用してそれらを SQL Server テーブルにコピーしています。それを壊した特定のファイルに到達するまで、すべてがうまく機能していました。

このファイルには、特定の位置に値がない数行が含まれていました。それらがマップされた列はmoneySQL Server の型ですが、NULL を許可するように設定されています。そのファイルを読み込もうとするたびに、文字列からお金への変換に失敗したため、SqlBulkCopy を実行できないというエラーが返されます。壊れているのはこの欠損値であることを確認しました。どうやら、パーサーは列を空の文字列のままにしておきますが、SqlBulkCopy はそれを想定していないためempty = null(ほとんどの場合はそうではありません)、money フィールドに「何も」入力できません。

テキスト ファイルを取り込むときに空を NULL に置き換える設定がパーサーで見つかりません。 SqlBulkCopy.WriteToServer()プロパティがほとんどないように見えるため、修正が見つかりません。これらのいずれかを調整できるかどうかは誰にもわかりませんか?インポートの前に DataTable をより適切に定義しようと考えましたが、このプロセスではかなりの数の異なるファイル仕様が処理されるため、実現可能ではないと思います。

DataTable を調べて、空の文字列をすべて NULL に更新する方法はありますか? 今考えられる唯一の方法は、基本的にこれらの RBAR をループすることですが、これらのファイルの多くには何万行もあるために機能しません。インポートする前に、列全体を正しいデータ型に置き換えることができるでしょうか? 実行するのに何年もかからなかったり、プロセス全体を書き直さなければならなかったりしない限り、私は何でも受け入れます。

4

0 に答える 0