【问题标题】:Reading CSV files with OleDbCommand / OleDbDataAdapter使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件
【发布时间】:2011-05-09 02:20:52
【问题描述】:

我不知道为什么,但是当我使用 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 以空行开始。
  • 以空行开始 schema.ini 并没有改变任何东西。

标签: c# .net ado.net csv


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    另一个绝妙的选择是使用 FileHelpers 库@www.filehelpers.com

    它比喷气式引擎更加抽象和灵活,允许您执行诸如导入文件以通过自定义直接构建您的类型的集合。

    FileHelperEngine 引擎 = new FileHelperEngine(); 列出客户 = engine.ReadFile("File.csv");

    这只是一个开始,然后您可以通过在您的集合上使用 linq 运算符来变得更简洁。

    Sk8tz

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2018-05-24
      • 2015-06-12
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多