我有一个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
导致此问题的原因以及如何解决?
答案 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
}
请注意,“,”是数据分隔符,您可以使用其他分隔符,例如“”或“;”