在运行时替换MDB文件

时间:2010-10-20 03:27:33

标签: .net winforms .net-4.0

我的应用程序读取一个Access数据库文件,该文件可以在运行时通过下载替换MDB文件(具有相同的模式)并覆盖现有文件来更新。在开发过程中这一切都很好,但在部署过程中会中断。

主要问题是数据适配器的连接字符串是

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

其中的| DataDirectory |令牌通常等于应用程序根目录。当我下载新文件并尝试删除现有的MDB文件时,Vista不喜欢它 - 抛出UnauthorizedAccessException,这是理所当然的,因为我不应该弄乱应用程序根目录中的文件。

相反,我应该下载并更新应用程序数据目录中的文件,例如Application.CommonAppDataPath

所以,我面临两种可能的解决方案(按照优先顺序):

  1. 以某种方式重新定义| DataDirectory |令牌指向Application.CommonAppDataPath。我试过AppDomain.CurrentDomain.SetData("DataDirectory", Application.CommonAppDataPath)没有运气;数据适配器抛出异常“密钥'数据源'的值无效。”当它试图填充DataSet时。

  2. 以编程方式更新数据集,使用其特定数据适配器填充每个表,然后插入,更新和删除数据行。当简单的文件移动就足够了,这似乎是一种可怕的痛苦。

  3. 有没有办法让解决方案#1工作,重新定义这个神奇的DataDirectory令牌?无论如何,这个域变量在哪里被定义?

    或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

尔加!我想通了。

事实上,解决方案是致电

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

问题是程序集的公司名称以“Inc.”结尾,因此应用程序数据路径中的一个目录名以句点字符结尾。看来数据连接不喜欢这种行为。