Возникли проблемы с постоянным использованием odbc с файлами dBase в C # - PullRequest
0 голосов
/ 17 января 2012

Вот мой код:

    private const string CONNECTION_STRING
    = "Driver={Microsoft dBase Driver (*.dbf)};"
    + "collatingsequence=ASCII;"
    + "defaultdir={0};"
    + "driverid=277;"
    + "maxbuffersize={1};"
    + "pagetimeout={2}";

    string connString = string.Format(CONNECTION_STRING, filePath, MAX_BUFFER_SIZE, PAGE_TIMEOUT);

    using (var _conn = new System.Data.Odbc.OdbcConnection(connString))
    {
      _conn.Open();
      using (var _comm = _conn.CreateCommand())
      {
        _comm.CommandText = QUERY_STRING;
        _comm.CommandType = CommandType.Text;
        using (var rdr = _comm.ExecuteReader())
        {
          while (rdr.Read())
          {
            /*Do something*/
          }
        }
      }
    }

Я получаю сообщение об ошибке «Ошибка выполнения SQL».Выполненный оператор SQL: SELECT * FROM MyTable Источник ошибки odbcjt32.dll Сообщение об ошибке Ошибка [HY001] [Microsoft] [Драйвер ODBC dBase] Превышен системный ресурс.

Открыто несколько гигабайт ОЗУ и HD, до и после запроса,И это всегда работает на первом проходе, но не на всех последовательных проходах.

Запуск в Win 7 64 и .NET 4.0.

Когда я получаю сообщение об ошибке, я перезагружаюсь кочисти это.Хотя я еще не пробовал делать GC-сброс.

1 Ответ

0 голосов
/ 23 января 2012

Поскольку я мог надежно прочитать файл один раз, в итоге я прочитал весь файл в память, а затем просто использовал его. Каждое событие, которое вынуждает сбрасывать пространство памяти, также решает проблему с соединением, не снимающим блокировку файла, поэтому перезагрузка файла в память также не была проблемой.

Если я в итоге найду лучшее решение, я тоже опубликую его. Однако я думаю, что это мертвая ветка, так как проект был закрыт, доставлен и оплачен.

...