Замена файла MDB во время выполнения - PullRequest
0 голосов
/ 20 октября 2010

Мое приложение считывает файл базы данных Access, который можно обновить во время выполнения, загрузив файл замены MDB (с той же схемой) и перезаписав существующий файл.Это все хорошо во время разработки, но оно ломается во время развертывания.

Основная проблема заключается в том, что строка подключения для адаптеров данных -

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\ModelDatabase.mdb"

, в которой | DataDirectory |токен часто равен корневому каталогу приложения.Vista не нравится, когда я загружаю новый файл и пытаюсь удалить существующий файл MDB - выбрасывается UnauthorizedAccessException, и это справедливо, потому что я не должен связываться с файлами в корне приложения.

Вместо этого я должен загружать и обновлять файлы в каталоге данных приложения, например Application.CommonAppDataPath.

Итак, я столкнулся с двумя возможными решениями (в порядке предпочтения):

  1. Каким-то образом переопределить, что | DataDirectory |токен, указывающий на Application.CommonAppDataPath.Я попытался AppDomain.CurrentDomain.SetData("DataDirectory", Application.CommonAppDataPath) без удачи;адаптер данных выдает исключение «Неверное значение для ключа« источник данных ».»когда он пытается заполнить DataSet.

  2. Обновите набор данных программно, заполнив каждую таблицу с помощью своего специального адаптера данных, затем вставив, обновив и удалив строки данных.Это кажется ужасной болью, когда достаточно простого перемещения файла.

Есть ли способ заставить решение # 1 работать, переопределив этот магический токен DataDirectory?В любом случае, где определена эта переменная домена?

Или есть лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 22 октября 2010

Г! Я понял это.

Решение, на самом деле, заключается в том, чтобы позвонить

AppDomain.CurrentDomain.SetData("DataDirectory", Application.CommonAppDataPath)

Проблема заключалась в том, что название компании сборки заканчивалось на «Inc.», поэтому одно из имен каталогов в пути к данным приложения заканчивалось символом точки. Похоже, что подключение к данным не понравилось это поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...