Строка подключения ADO.NET только для чтения для Excel - PullRequest
0 голосов
/ 14 декабря 2010

Я пытаюсь предотвратить появление следующего при чтении файла Excel с помощью ADO.NET:

.

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

Я знаю, что это происходит, потому что у другого пользователя открыт файл, но я не могу от него избавиться. Я пытался добавить Read Only=True; в строку подключения, но это не работает. Я также пытался установить Mode соединения только для чтения, но я не могу понять, как в C #.

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

Provider=Microsoft.Jet.OLEDB.4.0; data source=test.xls; Extended Properties="Excel 8.0;HDR=No;IMEX=1"

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

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

Кроме того, это устранит любые проблемы с разрешениями, которые можно устранить. Если у вас есть права на чтение, копия будет работать, если нет, то в любом случае обходного пути нет. У вас будут полные права доступа для скопированного файла, если вы сделаете путь назначения временной копии тем же путем, что и рабочая книга. (Application.Path)

Для этого используйте команду FileCopy srcFile, destName.

0 голосов
/ 14 декабря 2010

Ну, вы сказали, что пытались изменить режим только для чтения, как именно вы это сделали?

Согласно MSDN , по умолчанию открывается поставщик OLE DB для Microsoft JetБазы данных Microsoft Jet в режиме чтения / записи.Чтобы открыть базу данных в режиме только для чтения, задайте для свойства Mode для объекта ADO Connection значение adModeRead.

Поэтому в C # это должно выглядеть следующим образом:

ADODB.Connection myConn = new new ADODB.Connection();
myConn.Mode = adModeRead; //1
myConn.Open(strConectionString, null, null, -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...