2


1

OleDbCommand / OleDbDataAdapterを使用したCSVファイルの読み取り

理由はわかりませんが、OleDbDataAdapterまたはOleDbCommandを使用してCSVファイルを読み取ると、どちらの場合も結果のデータは適切に構造化されます(ファイルヘッダーから列を認識します)が、行データはすべて空の文字列です。

私は何度もCSV処理を成功させてきたので、このファイルで見つけた唯一の違いは、ファイル内のすべてのフィールドが引用符で囲まれていることです。 + schema.iniファイルを使用してみましたが、役に立ちませんでした。 これはMicrosoft Jet 4.0コンポーネントの問題のように感じますが、問題が何であるかはわかりません。

ファイルからの抜粋は次のとおりです。

"UNIQUEID","OWNERID","PHONE1","PHONE2","EMERGENCYCONTACT","ADDRESS1","ADDRESS2","ADDRESS3","ADDRESSCITY","ADDRESSSTATE","ADDRESSZIP","UNIONCODE","CUSTOM1","CUSTOM2","CUSTOM3","CUSTOM4","CUSTOM5","CUSTOM6"
"5","33","1235551212","          ","","1914 SANDFLAT ROAD","","","THOMASVILLE","AL","367849215","","contract","7.75","1","N","","A"
"6","34","1235551212","          ","","1407 OLD HWY. 5 SOUTH","","","THOMASVILLE","AL","36784","","contract","7.75","1","N","","B"
"7","35","1235551212","          ","","P.O. BOX 204","","","THOMASVILLE","AL","36784","","substitute","7.75","0","Y","","M"
"8","36","1235551212","          ","","383 UNCLE BEN RD","","","THOMASVILLE","AL","36784","","substitute","0.00","0","","",""

これが私の現在のコードです:

OleDbConnection conn = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\payroll;" +
    "Extended Properties=\"text;HDR=Yes;FMT=CSVDelimited\"");
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from file.txt", conn);
DataTable dt = new DataTable();
adapter.Fill(dt);

schema.iniファイルの内容は次のとおりです。 私はそれなしでファイルを読むことができませんでした:

[file.txt]
Format=CSVDelimited
ColNameHeader=True
Col1="UNIQUEID" Text
Col2="OWNERID" Text
Col3="PHONE1" Text
Col4="PHONE2" Text
Col5="EMERGENCYCONTACT" Text
Col6="ADDRESS1" Text
Col7="ADDRESS2" Text
Col8="ADDRESS3" Text
Col9="ADDRESSCITY" Text
Col10="ADDRESSSTATE" Text
Col11="ADDRESSZIP" Text
Col12="UNIONCODE" Text
Col13="CUSTOM1" Text
Col14="CUSTOM2" Text
Col15="CUSTOM3" Text
Col16="CUSTOM4" Text
Col17="CUSTOM5" Text
Col18="CUSTOM6" Text
CharacterSet=ANSI

2 Answer


2


私はその問題が何であるかを知りました。 schema.iniファイルの文字セットはANSIに設定されました。 ファイルのエンコードはUnicodeです。 文字セットをUnicodeに設定すると、問題が解決しました。


1


別の素晴らしい選択肢は、FileHelpersライブラリ@ www.filehelpers.comを使用することです

ジェットエンジンよりもはるかに抽象的で柔軟性が高いため、ファイルのインポートなどの操作を行って、カスタマイズを使用してその場で直接コレクションを作成できます。

i.e

FileHelperEngineエンジン=新しいFileHelperEngine();顧客のリスト= engine.ReadFile( "File.csv");

これはほんの始まりに過ぎません。コレクションでlinq演算子を使用すると、さらにクリーンになります。

Sk8tz