在C#winforms中读取csv文件时出现数据错误

时间:2011-12-30 19:24:03

标签: c# winforms csv dataset

我有一个C#winforms正在从csv文件中读取一列。它读取4列中的3列正确。 csv文件中的第4列为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

导致此问题的原因以及如何解决?

2 个答案:

答案 0 :(得分:2)

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

这是完整指南.. http://www.aspdotnetcodes.com/Importing_CSV_Database_Schema.ini.aspx

问候。

答案 1 :(得分:1)

最简单的方法是手动解析文件而不使用数据库连接。

    string[] lines = File.ReadAllLines(path);

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

请注意,“,”是数据分隔符,您可以使用其他分隔符,例如“”或“;”