在使用Microsoft.Jet.OLEDB.4.0提供程序读取时,csv文件名是否需要特定模式?

时间:2012-10-25 05:28:30

标签: c# .net csv oledb jet

我尝试使用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提供商的已知问题吗?

2 个答案:

答案 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。

- http://www.databasejournal.com/features/msaccess/article.php/3853531/Working-with-external-text-files-in-MS-Access.htm

您可以修改注册表以使其接受其他人。