为什么Jet OLEDB驱动程序缓存我的MDB文件?

时间:2011-11-25 08:01:44

标签: asp.net ms-access

我有一个使用Access文件的Cassini应用程序。更新的安装程序会覆盖应用程序和数据库。但是,即使在系统重启后,应用程序仍会看到旧数据。 (还手动复制MDB文件以确保它已被替换,但它没有帮助。)

应用程序查看新MDB数据的唯一方法是将其安装到新文件夹中。

连接字符串是标准的(我认为):

Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
    HttpContext.Current.Server.MapPath("App_Data\\" +
    ConfigurationManager.AppSettings.Get("dbfile")) + ";Jet OLEDB:Database Password=xxxx";

知道发生了什么以及如何避免缓存问题?

更新(回答评论中的一些问题):

  • 我们只能在Windows 7上重现此问题。
  • Cassini应用程序永远不会更新MDB。我们创建数据库并将其发送给用户。 - 我们确保安装程序成功替换了该文件。实际上如果我们手动更换它会发生同样的事情。
  • Windows重新启动后问题仍然存在。

4 个答案:

答案 0 :(得分:1)

  1. 转到解决方案资源管理器
  2. 选择mdb文件
  3. 转到属性,有一个属性
  4. 请勿将其设置为“如果较新的话复制”

答案 1 :(得分:0)

设置 连接对象的缓存授权属性为false,默认情况下为true。

http://msdn.microsoft.com/en-us/library/aa140022(v=office.10).aspx

答案 2 :(得分:0)

您是否尝试过使用“Microsoft.ACE.OLEDB.12.0”提供程序?我相信它预装了Windows 7。

答案 3 :(得分:0)

新的Windows 7 / Server 2008安全模型在某些条件下为每个用户提供文件的虚拟副本。

您是否可能会在安装完成后点击向用户展示过时快照的设计功能?应用程序是否可能对安装数据库的用户使用不同的凭据?

User Account Control Data Redirection处有功能说明。建议的解决方案是为数据使用更合适的文件夹