2012-10-25 27 views
2

我試過使用OleDb接口來讀取CSV文件,但我注意到一些奇怪的東西。在使用Microsoft.Jet.OLEDB.4.0提供程序閱讀時,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

在執行調用程序調用時引發錯誤... – deostroll

回答

0

是的,這是噴氣機是非常挑剔的文件擴展名:。

另一個潛在的問題是,默認情況下,你是有限的(至少在 Access)與您可以使用的文件擴展名退房Ø在框中,您只能使用 文件擴展名爲txt,csv,tab和asc。

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

您可以通過修改註冊表,使之接受別人。

+1

文件名中的多個句點將導致錯誤。您可以使用API​​調用來獲取8.3 MS-DOS名稱並使用它。示例在這裏:http://stackoverflow.com/a/22680288/741136 – SSS

0

你必須用引號括整個文件名,但因爲這是一個字符串使用\」逃脫他們

cxn.ConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=\"{0}\"",fileDirPath); 

改變你上面一行代碼,它應該工作。

相關問題