2011-02-04 88 views
2

我想用OleDB 4讀取CSV文件中的一些數據。我使用下面的代碼,這是我從表示它應該工作的各種來源複製....使用OleDB讀取CSV數據的文件訪問錯誤

protected virtual string ConnectionString 
    { 
     get 
     { 
      return string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=Yes;FMT=Delimited'", _path); 
     } 
    } 

    public void ReadData() 
    { 
       using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT [Name] FROM SomeTable", ConnectionString)) 
       { 
        using (DataTable table = new DataTable()) 
        { 
         adapter.Fill(table); 
         foreach (DataRow row in table.Rows) 
         { 
           //Do something with the data 
         } 
        } 
       } 
    } 

我想測試一個單元測試的代碼,但我一直收到以下異常「adapter.Fill」行:

「Microsoft Jet數據庫引擎無法打開該文件」,它已被另一個用戶獨佔打開,或者您需要查看其數據的權限。

請任何人都可以給我一些線索,找出問題可能是什麼?該文件不被另一個應用程序打開。我已經嘗試使用「AppDomain.CurrentDomain.BaseDirectory」下的路徑,以及只是一個硬編碼的路徑到臨時文件夾,但無論我嘗試它給我同樣的錯誤。

+0

你有沒有解決問題了嗎? – callisto 2012-05-02 13:37:43

回答

0

在連接字符串中,您必須將Data Source設置爲包含CSV文件的文件夾,然後您必須登錄SELECT * FROM your-file-name.csv

這裏工作(和測試)樣本與位於F:\Temp\dummy.csv文件:

var dir = @"F:\Temp"; 
var fn = "dummy.csv"; 
var cn = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';"); 
cn.Open(); 
var cmd = new OleDbCommand("select * from [" + fn + "]", cn); 
var rdr = cmd.ExecuteReader(); 
while (rdr.Read()) 
{ 
    Console.WriteLine(rdr[0] + " " + rdr[1]); 
} 
cn.Close();