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

Posted

技术标签:

【中文标题】在 C# winforms 中读取 csv 文件时出现数据错误【英文标题】:data error when reading csv file in C# winforms 【发布时间】:2012-01-30 18:37:06 【问题描述】:

我有一个 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

这是什么原因造成的,我该如何解决?

【问题讨论】:

您能否提供几行 CSV 示例? 这是一篇关于配置 schema.ini 文件以将 OleDb 内容与 CSV 一起使用的文章,特别是分隔符。 weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx 我很确定这样的事情不需要修改注册表。特别是因为前 3 行被准确检索 完全同意。我实际上是指该链接msdn.microsoft.com/en-us/library/ms709353.aspx在那篇文章中谈论配置它。这可能无济于事,因为它正在正确读取第一几行,只是需要检查一下。 该数据看起来不像 CSV。这是您正在使用的实际数据,还是您真的希望在恰好具有 csv 扩展名的文件中处理固定文件格式? 【参考方案1】:

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

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

问候。

【讨论】:

难以置信...但是 schema.ini 做到了。【参考方案2】:

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

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

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

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

【讨论】:

其实是一个excel文件,文件扩展名为csv

以上是关于在 C# winforms 中读取 csv 文件时出现数据错误的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 如何存储用户选择的文件路径 下次启动时读取该路径

C#中winform使用相对路径读取文件的方法

如何在 C# (Winforms) 中复制或读取假脱机文件

在c#的winform 下怎么读取 xml文件中的数据?

在c#的winform 下怎么读取 xml文件中的数据?

在 c# 中有效地读取 .csv 文件? [关闭]