C# 使用OleDbCommand/OleDbDataAdapter读取CSV文件

C# 使用OleDbCommand/OleDbDataAdapter读取CSV文件,c#,.net,ado.net,csv,C#,.net,Ado.net,Csv,我不知道为什么,但当我使用OleDbDataAdapter或OleDbCommand读取CSV文件时,在这两种情况下,生成的数据结构良好(它可以识别文件头中的列),但行数据都是空字符串 我以前多次成功地进行了CSV处理,因此我发现该文件的唯一区别是文件中的所有字段都用引号括起来。 我尝试使用schema.ini文件,但没有效果。这感觉像是Microsoft Jet 4.0组件的问题,但我无法找出问题所在 以下是该文件的摘录: "UNIQUEID","OWNERID","PHONE1","PHON

我不知道为什么,但当我使用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

我发现了问题所在。schema.ini文件中的字符集设置为ANSI。文件编码是Unicode。将CharacterSet设置为Unicode解决了这个问题。

另一个很好的选择是使用FileHelpers库@www.FileHelpers.com

它比jet引擎更抽象、更灵活,允许您在导入文件时通过自定义直接构建类型的集合

i、 e

FileHelperEngine=newFileHelperEngine(); 列出客户=engine.ReadFile(“File.csv”)

这只是一个开始,然后通过在集合上使用linq操作符,您可以获得更干净的内容


Sk8tz

能否显示当前代码的示例?以空行启动schema.ini。以空行启动schema.ini不会改变任何内容。