Строка подключения только для чтения к базе данных доступа - PullRequest
11 голосов
/ 10 мая 2011

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

Я пробовал:

Поставщик = Microsoft.ACE.OLEDB.12.0; Источник данных = {0}; Постоянная информация о безопасности = Ложь; Режим = Чтение

Поставщик = Microsoft.ACE.OLEDB.12.0; Источник данных = {0}; Информация о постоянной безопасности = Ложь; Расширенные свойства = "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 под локальной системной учетной записью.

Ответы [ 2 ]

2 голосов
/ 02 июля 2012

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

2 голосов
/ 17 мая 2011

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

...