C # + BDE + проблема DBF - PullRequest
       14

C # + BDE + проблема DBF

0 голосов
/ 16 сентября 2009

У меня огромная проблема:

У меня много файлов .dbf (~ 50000), и мне нужно импортировать их в базу данных Oracle. Я открываю концепцию вот так:

     OleDbConnection oConn = new OleDbConnection();
  OleDbCommand oCmd = new OleDbCommand();
  oConn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + directory + ";Extended Properties=dBASE IV;User ID=Admin;Password=";
            oCmd.Connection = oConn;
            oCmd.CommandText = @"SELECT * FROM " + tablename;
        try
            {
                oConn.Open();
                resultTable.Load(oCmd.ExecuteReader());
            }
            catch (Exception ex)
            {
                 MessageBox.Show(ex.Message);
              }
oConn.Close();
oCmd.Dispose();
oConn.Dispose();

Я читаю их в цикле, а затем вставляю в оракула. Все в порядке. НО: есть около 1000 файлов, которые я не могу открыть. Они возбуждают исключение "не стол". Поэтому я гуглю и устанавливаю Borland Database Engine. Теперь все работает хорошо ... но нет.

Теперь, когда я читаю файлы, на 1024 возникает исключение файла: «Превышен системный ресурс». Но у меня много бесплатных ресурсов. Когда я удаляю BDE, все снова в порядке, ошибка «превышен системный ресурс», но я не могу прочитать все файлы.

Помогите пожалуйста.

PS: пробовал использовать ODBC, но ничего не меняется.

Ответы [ 4 ]

1 голос
/ 16 сентября 2009

Я заметил, что вы используете провайдера Jet oledb для подключения к вашим dbf-файлам, я не уверен, решит ли это вашу проблему или нет, но есть провайдер oledb для visual FoxPro , который мне кажется Вы можете использовать для подключения к файлам DBF.

0 голосов
/ 31 августа 2011

У меня были похожие проблемы с файлами DBF, когда я время от времени получал сообщения «Превышен системный ресурс».

Для меня решение было создать обертку Delphi DLL для BDE (стандартные вызовы Delphi TQuery) и вызывать эту DLL из C # с помощью Interop.

0 голосов
/ 22 сентября 2009

У меня есть модуль Python, который может извлекать данные из большинства файлов DBF, включая DBF7, структура которого несколько отличается. Ему не нужны драйверы, OleDb или ODBC - он просто читает файл. Он очень тщательно проверяет входные файлы и выдает гораздо более подробные сообщения, чем «не таблица», если это не устраивает. Можете ли вы предоставить несколько образцов файлов для проверки?

0 голосов
/ 18 сентября 2009

Различные варианты DBF (dBASE, Clipper, FoxPro) похожи, за одним заметным исключением: DBF7, который был представлен в Visual dBASE 7 и работающий на BDE. DBF Viewer 2000 утверждает, что поддерживает DB7, вероятно, изначально, поскольку формат все еще не так сложен. Может быть, есть некоторые свойства / информация файла, которые вы можете просмотреть, чтобы подтвердить, что все DBF «не таблицы» - это DBF7.

Даже если это и определит природу проблемы, я не вижу особенно простого решения. Если это разовая сделка, возможно, вы можете запустить цикл, сохранить имена файлов «1000», которые не работают без установленного BDE, и выполнить второй проход с BDE. (Если это больше 1024, вам понадобится третий проход.)

...