无法使用oledb从csv中读取所有列
本文关键字:读取 csv oledb | 更新日期: 2023-09-27 18:21:50
我有一个csv文件,其标题如下:"取货日期"、"取货时间"、"取货地址"、"来自区域"等等。。我只能阅读前两列,除了使用oledb之外什么都不能读。我使用了一个指定了所有列名的schema.ini文件。请提出建议。
这是我的csv示例
"PickupDate","PickupTime","PickupAddress","FromZone"
"11/05/15","4:00:00 AM","9 Houston Rd, CityName, NC 28262,","262"
这是我的代码:
Schema.ini
-----------
[ReportResults.csv]
ColNameHeader = True
Format = CSVDelimited
col1=Pickup Date DateTime
col2=Pickup Time Text width 100
col3=Pickup Address Text width 500
col4=FromZone short
oledb code
-----------
public static DataTable SelectCSV(string path, string query)
{
// since the file contains addresses with , the delimiter ", is used. Each cell is written within "" in the file.
var strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path +
"; Extended Properties='text;HDR=Yes;FMT=Delimited('",)'";
OleDbConnection selectConnection = (OleDbConnection)null;
OleDbDataAdapter oleDbDataAdapter = (OleDbDataAdapter)null;
selectConnection = new OleDbConnection(strConn);
selectConnection.Open();
using(OleDbCommand cmd=new OleDbCommand(query,selectConnection))
using (oleDbDataAdapter = new OleDbDataAdapter(cmd))
{
DataTable dt = new DataTable();
dt.Locale=CultureInfo.CurrentCulture;
oleDbDataAdapter.Fill(dt);
return dt;
}
}
每一列都包含在双引号中,因此双引号中的每个逗号都不被视为delimeter。
所以你可以导入你的文件:
- 不使用
schema.ini
- 在连接字符串中指定
EXTENDED PROPERTIES='text;HDR=Yes;FMT=Delimited'
如果您需要使用模式来解决其他问题,请注意您的schema.ini
不是正式正确的;使用这样的东西:
[ReportResults.csv]
ColNameHeader = True
Format = CSVDelimited
col1=PickupDate DateTime
col2=PickupTime Text width 100
col3=PickupAddress Text width 500
col4=FromZone short
如果提取DateTime
列时遇到问题,请指定DateTimeFormat
选项;即,如果您的提货日期类似于2015/11/13,请指定DateTimeFormat=yyyy/MM/dd=yyyy/MM/dd
。
如果在提取Short
列时遇到问题,请验证FromZone是介于-32768和32767之间的整数;如果没有,请使用其他类型。如果小数分隔符有问题,也可以设置DecimalSymbol
选项。
您可以在MSDN上找到更多信息。