Мое приложение считывает файл базы данных Access, который можно обновить во время выполнения, загрузив файл замены MDB (с той же схемой) и перезаписав существующий файл.Это все хорошо во время разработки, но оно ломается во время развертывания.
Основная проблема заключается в том, что строка подключения для адаптеров данных -
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\ModelDatabase.mdb"
, в которой | DataDirectory |токен часто равен корневому каталогу приложения.Vista не нравится, когда я загружаю новый файл и пытаюсь удалить существующий файл MDB - выбрасывается UnauthorizedAccessException
, и это справедливо, потому что я не должен связываться с файлами в корне приложения.
Вместо этого я должен загружать и обновлять файлы в каталоге данных приложения, например Application.CommonAppDataPath
.
Итак, я столкнулся с двумя возможными решениями (в порядке предпочтения):
Каким-то образом переопределить, что | DataDirectory |токен, указывающий на Application.CommonAppDataPath
.Я попытался AppDomain.CurrentDomain.SetData("DataDirectory", Application.CommonAppDataPath)
без удачи;адаптер данных выдает исключение «Неверное значение для ключа« источник данных ».»когда он пытается заполнить DataSet.
Обновите набор данных программно, заполнив каждую таблицу с помощью своего специального адаптера данных, затем вставив, обновив и удалив строки данных.Это кажется ужасной болью, когда достаточно простого перемещения файла.
Есть ли способ заставить решение # 1 работать, переопределив этот магический токен DataDirectory?В любом случае, где определена эта переменная домена?
Или есть лучший способ решить эту проблему?