Использование IDataReader для чтения файла DBF в C # - PullRequest
0 голосов
/ 08 июля 2011

Я пытаюсь прочитать файл .dbf с помощью приложения для чтения данных, используя OleDb, например:

const string OleDbConnectionString =
    @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydbase;Extended Properties=dBASE IV;";
    var connection = new OleDbConnection(OleDbConnectionString);
    connection.Open();

    var command = new OleDbCommand("select * from my.dbf", connection);

    reader = command.ExecuteReader();
    Console.WriteLine(reader.Read()); // true
    Console.WriteLine(reader[0].ToString()); // exception

Исключение имеет тип InvalidCastException и говорит: Невозможно регистрировать от System.__ComObject до IRowset,Когда я пытался использовать OleDbAdapter для заполнения таблицы, все работало нормально.
Как мне прочитать файл .dbf, используя IDataReader?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Я думаю, что ваш путь может быть неправильным, так как у вас есть "C: \ mybase" в строке подключения, а затем добавьте "my.dbf", который добавляет к "C: \ mybasemy.dbf".

Я предоставлю код, как я открываю и читаю DBF, используя набор данных вместо считывателя.

string oledbConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\spcs\;Extended Properties=dBASE IV;User ID=Admin;Password=";

        OleDbConnection oledbConnection = new OleDbConnection(oledbConnectionString);

        string oledbQuery = @"SELECT * FROM KUND";

        try
        {
            OleDbCommand oledbCommand = new OleDbCommand(oledbQuery, oledbConnection);

            OleDbDataAdapter oledbAdapter = new OleDbDataAdapter(oledbCommand);

            DataSet oledbDataset = new DataSet();

            oledbAdapter.FillSchema(oledbDataset, SchemaType.Mapped);

            oledbConnection.Open();

            oledbAdapter.Fill(oledbDataset);

            foreach (DataRow row in oledbDataset.Tables[0].Rows)
            {
                System.Diagnostics.Trace.WriteLine(row[0].ToString());
            }
        }
        catch (Exception ex)
        {
            // Do something with ex
        }
0 голосов
/ 08 июля 2011

Хорошо, попробуйте использовать GetString:

const string OleDbConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydbase;Extended Properties=dBASE IV;";
OleDbConnection connection = new OleDbConnection(OleDbConnectionString);
connection.Open();

OleDbCommand command = new OleDbCommand("select * from my.dbf", connection);

OleDbDataReader reader = command.ExecuteReader();
Console.WriteLine(reader.Read()); // true
Console.WriteLine("{0}", reader.GetString(0)); // exception
...