2011-02-04 10 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 
         } 
        } 
       } 
    } 

を、私はそれが動作する必要があることを示すさまざまなソースからコピーした次のコードを、使用しています

"Microsoft Jetデータベースエンジンはファイル 'を開くことができません。既に他のユーザーによって排他的に開かれているか、データを表示するためのアクセス許可が必要です。"

問題の可能性があることを知る手がかりを誰にでも教えてください。このファイルはすでに別のアプリケーションによって開かれていません。私は、 "AppDomain.CurrentDomain.BaseDirectory"の下のパスと、一時的なフォルダへのハードコーディングされたパスを使用しようとしましたが、試してみると同じエラーが表示されます。

+0

あなたはまだ問題が解決したことがありますか? – callisto

答えて

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(); 
関連する問題