在 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 文件时出现数据错误的主要内容,如果未能解决你的问题,请参考以下文章