我的应用程序读取一个Access数据库文件,该文件可以在运行时通过下载替换MDB文件(具有相同的模式)并覆盖现有文件来更新。在开发过程中这一切都很好,但在部署过程中会中断。
主要问题是数据适配器的连接字符串是
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\ModelDatabase.mdb"
其中的| DataDirectory |令牌通常等于应用程序根目录。当我下载新文件并尝试删除现有的MDB文件时,Vista不喜欢它 - 抛出UnauthorizedAccessException
,这是理所当然的,因为我不应该弄乱应用程序根目录中的文件。
相反,我应该下载并更新应用程序数据目录中的文件,例如Application.CommonAppDataPath
。
所以,我面临两种可能的解决方案(按照优先顺序):
以某种方式重新定义| DataDirectory |令牌指向Application.CommonAppDataPath
。我试过AppDomain.CurrentDomain.SetData("DataDirectory", Application.CommonAppDataPath)
没有运气;数据适配器抛出异常“密钥'数据源'的值无效。”当它试图填充DataSet时。
以编程方式更新数据集,使用其特定数据适配器填充每个表,然后插入,更新和删除数据行。当简单的文件移动就足够了,这似乎是一种可怕的痛苦。
有没有办法让解决方案#1工作,重新定义这个神奇的DataDirectory令牌?无论如何,这个域变量在哪里被定义?
或者有更好的方法来解决这个问题吗?
答案 0 :(得分:0)
尔加!我想通了。
事实上,解决方案是致电
AppDomain.CurrentDomain.SetData("DataDirectory", Application.CommonAppDataPath)
问题是程序集的公司名称以“Inc.”结尾,因此应用程序数据路径中的一个目录名以句点字符结尾。看来数据连接不喜欢这种行为。