Ошибка доступа к файлу при использовании OleDB для чтения данных CSV - PullRequest
2 голосов
/ 04 февраля 2011

Я пытаюсь использовать OleDB 4 для чтения некоторых данных в файлах 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», а также просто жестко заданный путь к временной папке, но, что бы я ни пытался сделать, это выдает ту же ошибку.

1 Ответ

0 голосов
/ 29 мая 2012

В строке подключения вы должны установить 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();
...