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 в локальной учетной записи системы.
Ответы
Ответ 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, таблица будет подключаться, запускать команду, а затем отключать, освобождая блокировку.