C# WinForms中读取CSV文件时出现数据错误

4

我是一名辅助翻译员,下面是需要翻译的内容:

我有一个C# WinForms程序,正在读取CSV文件中的一列数据。它可以正确读取四列中的三列,但是CSV文件中的第四列是S4,而数据集却显示为4

代码如下:

string conn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data"
            + "Source={0}; Extended Properties=""text;HDR=YES;FMT=DELIMITED""",
              strDirectoryPath);

OleDbConnection oleDBConn = new OleDbConnection(conn);
oleDBConn.Open();

OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + strFileName + "]",
                                           conn);
DataSet ds = new DataSet();
da.Fill(ds);

CSV数据示例如下:

AA0013  Incident    Incident    S4
AA0016  Incident    Incident    S3
AA0017  Incident    Incident    S3
AA0023  Incident    Incident    S3
AA0076  Issue       Issue       S3
AA0079  Incident    Incident    S6
AA0082  Issue       Issue       S6
AA0084  Incident    Incident    S6
AA0085  Incident    Incident    S6

什么原因会导致这种情况发生,我该如何解决?

3
你能提供一些 CSV 文件中的示例行吗? - user1231231412
这是一篇关于配置schema.ini文件以使用OleDb处理CSV文件,特别是分隔符的文章。http://weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx - user1231231412
我非常确定这样的事情不应该需要修改注册表。特别是因为前三行被准确地检索出来。 - user1111955
1
完全同意。我实际上是指那篇文章中提到配置的这个链接http://msdn.microsoft.com/en-us/library/ms709353.aspx。虽然它确实正确地读取了前几行,但还是值得检查一下。 - user1231231412
1
这些数据看起来不像是CSV格式的。这是您正在使用的实际数据,还是您真正想要处理一个固定文件格式的文件,只是恰好有一个csv扩展名? - competent_tech
显示剩余4条评论
2个回答

2
这是因为有时OLEDB提供程序会自动检测列的数据类型,并尝试将该列中的所有值转换为它检测到的特定数据类型。要解决此问题,您需要指定schema.ini文件,该文件将保存有关每个列及其数据类型的信息,以便OLEDB不会尝试隐式地将任何列转换为其自己喜欢的数据类型 :)...
以下是完整的指南.. http://www.aspdotnetcodes.com/Importing_CSV_Database_Schema.ini.aspx 问候。

令人难以置信...但是 schema.ini 实现了它。 - user1111955

1
最简单的方法是手动解析文件,而不使用数据库连接。
    string[] lines = File.ReadAllLines(path);

    foreach(string row in lines)
    {
        string[] data = row.Split(",");
        //Data processing goes here
    }

请注意,"," 是数据分隔符,您可以使用其他分隔符,例如空格或";"。

它实际上是一个Excel文件,具有CSV文件扩展名。 - user1111955

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接