Подтвердить что ты не робот

Readonly строка подключения к базе данных доступа

Я пытаюсь подключиться к файлу базы данных Access с помощью System.Data.OleDb.OleDbConnection. Мне нужно подключиться в режиме readonly, потому что другое приложение использует его одновременно. Я могу подключиться к базе данных в режиме чтения/записи без проблем, но не могу найти нужную строку для чтения.

Я пробовал:

Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = {0}; Persist Security Info = False; Mode = Read

Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = {0}; Persist Security Info = False; Расширенные свойства = "ReadOnly = true;"

Спасибо.

EDIT:

(Я должен был поместить дополнительную информацию в исходный вопрос.)

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

Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Mode=Read

Я бы получил следующую ошибку:

System.Data.OleDb.OleDbException (0x80004005): The Microsoft Office Access database engine cannot open or write to the file '{0}'. It is already opened exclusively by another user, or you need permission to view and write its data.

Мое приложение работает в службе Windows в локальной учетной записи системы.

4b9b3361

Ответ 1

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

Ответ 2

Реальная проблема заключается в том, что Excel оставляет соединение открытым до закрытия файла.

В Excel 2007+ по умолчанию для параметра MaintainConnection установлено значение true. Вам нужно зайти в редактор vb и использовать код, чтобы превратить его в false. Я не видел способа сделать это через визуальный интерфейс. Даже если вы установите строку подключения только для чтения, она заблокирует базу данных доступа (по моему опыту).

Для надежного подключения:

Sheets("sheet1").PivotTables("pivottable1").PivotCache.MaintainConnection = False

Для QueryTable:

Range("A2").Select
Selection.ListObject.QueryTable.MaintainConnection = False
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

Установив для него значение false, таблица будет подключаться, запускать команду, а затем отключать, освобождая блокировку.