我尝试使用OleDb接口读取CSV文件,但我发现了一些奇怪的东西。
var filePath = @"C:\set2\orders3_1.csv";
var fileDirPath = Path.GetDirectoryName(filePath);
SqlBulkCopy bcp = new SqlBulkCopy("Data Source=.; Initial Catalog=indexer; Integrated Security=SSPI");
OleDbConnection cxn = new OleDbConnection();
cxn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=" + fileDirPath;
OleDbCommand cmd = cxn.CreateCommand();
cmd.CommandText = string.Format("Select [OrderNumber] from [{0}]", Path.GetFileName(filePath));
cxn.Open();
var rdr = cmd.ExecuteReader();
bcp.DestinationTableName = "PersonTable";
bcp.WriteToServer(rdr);
rdr.Close();
cxn.Close();
当我将文件名设为orders3_1.csv
时,它可以正常显示。但是当我将文件名修改为orders3.1.csv
时,代码会遇到一个异常,说它无法找到该文件......
这是JET提供商的已知问题吗?
答案 0 :(得分:0)
你必须用引号包装整个文件名,但因为这是一个文字字符串,所以使用\“来逃避它们
cxn.ConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=\"{0}\"",fileDirPath);
更改代码中的上一行,它应该有效。
答案 1 :(得分:0)
是的,确实如此。 Jet对文件扩展非常挑剔:
另一个潜在的问题是,默认情况下,你是有限的(至少 在Access中)您可以使用哪些文件扩展名。开箱即用 只有你可以使用的文件扩展名是txt,csv,tab和asc。
您可以修改注册表以使其接受其他人。