2013-12-17 30 views
1

我在這個新的,所以我不能找到解決我的疑難問題想讀.csv文件DataTable中使用OleDB.Here無法打開CSV文件是我的代碼使用OLEDB

string file = "D:\\MyFile.csv"; 
     string dir = Path.GetDirectoryName(file); 

     String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties='text;HDR=Yes;FMT=Delimited'"; 
     OleDbConnection objConn = new OleDbConnection(sConnectionString); 

     objConn.Open(); 
     DataTable dt = new DataTable(); 
     OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + file + "]", objConn); 
     OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); 
     objAdapter1.SelectCommand = objCmdSelect; 
     objAdapter1.Fill(dt); 
     objConn.Close(); 

但我收到一個錯誤:Microsoft Jet數據庫引擎找不到對象'D:\ MyFile.csv'。確保對象存在,並且正確拼寫其名稱和路徑名。

該文件位於正確的位置,所以你能告訴我可能是什麼問題?

+0

你跟File.Exists(文件)得到了什麼? –

回答

3

放入d一些文件夾內的文件:\,然後重試

GetDirectoryName函數通常返回 '' 當使用這樣的等

GetDirectoryName( 'C:\ asd.txt')返回 '',以便使用它像

GetDirectoryName( 'C:\ myfol \ asd.txt'),它會返回 'C:\ myfol'

和你的代碼是concatinating目錄名稱,這樣沒準你concatinating一個空字符串「 '

在行 1. String sConnectionString =「Provider = Microsoft.Jet.OLEDB.4.0; Data Source =」+ dir +「; 2. sConnectionString =「提供商= Microsoft.Jet.OLEDB.4.0 .;數據源= ''; //作爲DIR是 ''

檢查 http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx

額外幫助

0

你。需要從文件名中刪除該行的路徑:

OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + file + "]", objConn); 

它應該閱讀:

OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + Path.GetFileName(file) + "]", objConn); 

在連接字符串中,你要告訴引擎目錄,在命令中你要告訴引擎要使用的文件(該路徑可以被看作等同於數據庫,文件等同於一個表)。

您可以改善這個如下:

string file = "D:\\MyFile.csv"; 
string dir = Path.GetDirectoryName(file); 
string name = Path.GetFileName(file); 

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties='text;HDR=Yes;FMT=Delimited'"; 
... 
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + name + "]", objConn); 
... 
0

嘗試與在選擇查詢的實際文件名。

SELECT * FROM [MyFile.csv]

OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [MyFile.csv]", objConn);