Чтение файла DBF: System.Data.OleDb.OleDbException

Я пытаюсь открыть DBF в файле С# и загрузить его в базу данных MySQL. Сейчас я просто пытаюсь открыть файл DBF, но получаю следующую ошибку:

A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Error: Failed to retrieve the required data from the DataBase.

Unrecognized database format 'C:\Users\Path\..\..\..\SOMEFILE.DBF'.

Мой код выглядит следующим образом.

private void button2_Click(object sender, EventArgs e)
{
    DirectoryInfo dir = new DirectoryInfo(Regex.Replace(textBox1.Text, @"\\", @"\\"));
    foreach (FileInfo file in dir.GetFiles())
    {
        MessageBox.Show(file.Name);
        string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + file.Name;
        string strAccessSelect = "SELECT * FROM "+file.Name.Substring(0,file.Name.Length-4);
        DataSet myDataSet = new DataSet();
        OleDbConnection myAccessConn = null;

        try
        {
            myAccessConn = new OleDbConnection(strAccessConn);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
            return;
        }

        try
        {
            OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

            myAccessConn.Open();
            myDataAdapter.Fill(myDataSet);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
            return;
        }
        finally
        {
            myAccessConn.Close();
        }
    }
}

Я получаю только первое MessageBox с именем файла, а затем выдает ошибку.


person user908759    schedule 21.01.2014    source источник
comment
Опубликуйте трассировку стека, пожалуйста.   -  person JNYRanger    schedule 21.01.2014
comment
хм, это база данных Dbase/Foxpro, которую вы пытаетесь подключить? Я думаю, что в foxpro dbf источником данных должно быть имя папки. а>   -  person bansi    schedule 21.01.2014
comment
user908759:Какая у тебя проблема? Пожалуйста, удалите блок try……catch, чтобы увидеть, какой оператор, какой тип ошибки и сообщение вы получили сейчас.   -  person    schedule 21.01.2014


Ответы (2)


Строка подключения должна указывать, что источник данных OleDB относится к типу DBASE:

string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=dBase III";

Также обратите внимание, что при подключении к DBase через OleDB вы указываете не файл DBF, а папку, в которой он содержится. Отдельные файлы представляют собой таблицы.

person nicholas    schedule 21.01.2014

Использовать источник данных без имени файла, только путь.

string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir;
person x2.    schedule 21.01.2014