Не удается получить доступ к файлу DBF, если к нему обращается другое приложение

Я пытаюсь получить данные из файлов DBF из службы.NET REST. Эти файлы являются бизнес-данными другого приложения. Это довольно старое приложение, поэтому я должен справиться с dBase/FoxPro.

Я только хочу читать данные. Я не заинтересован в обновлении / вставке.

Мой сервис работает нормально, и я могу получать сообщения JSON с данными. Проблема возникает, когда другое приложение работает. Если я пытаюсь получить доступ к данным во время работы другого приложения, я получаю сообщение "ОШИБКА [HY000] [Microsoft][ODBC dBase Driver] Внешняя таблица не в ожидаемом формате". Пока я могу получить доступ к данным, когда другое приложение не запущено, сообщение об ошибке звучит странно.

Другое программное обеспечение, такое как DBF explorer, может получать доступ к данным при работающем другом приложении, поэтому я думаю, что это должна быть неправильная конфигурация в строке подключения или драйвере.

Кто-нибудь знает, как настроить подключение ODBC для доступа к этим таблицам, когда они открыты другими приложениями?

Заранее спасибо!

PS: Моя строка подключения:

@"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" + pathtoDBFFile + ";";

2 ответа

Решение

Во-первых, я бы не использовал драйвер dBASE, а вместо этого скачал и использовал драйвер Visual FoxPro OleDb от MS.

Кроме того, в строке подключения можно установить для параметра "Эксклюзивное использование" по умолчанию значение "Нет", как показано в следующем примере на сайте ConnectionStrings.com. Часть "Драйвер" неверна для провайдера OleDb, но может помочь контекст "Исключительно = Нет", "Удалено = Нет" и любые другие параметры, которые вы можете добавить туда.

Драйвер ={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\myvfpdb.dbc; Эксклюзив = Нет; NULL=NO; Разобрать = машина;BACKGROUNDFETCH=NO; ИЗЪЯТ = NO;

Другая ссылка, которая ссылается на соединение с таблицами VFP, и ссылка для загрузки поставщика VFP OleDB.

Это типично для приложений DBF. Каждое приложение, которое использует DBF, может блокировать его при необходимости (так называемый "эксклюзивный режим")

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

Другие вопросы по тегам