【问题标题】:Failed to update .mdf database because the database is read-only (Windows application)无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)
【发布时间】:2011-08-08 11:27:09
【问题描述】:

我使用 C# 创建了一个数据库 Windows 应用程序。我的应用程序在 Windows XP 上成功运行,但无法在 Vista 或 Windows 7 系统上正确执行。我的应用程序显示类似于

的消息

无法更新 .mdf 数据库,因为该数据库是只读的

谁能帮我解决这个问题?

【问题讨论】:

  • 数据库文件存放在哪里,如何访问?你在使用 Sql Server 用户实例吗? 给我们看一些代码! =)
  • 数据库文件存储在我的应用程序路径中,我使用的是 ado.net
  • 给我们看一些代码 - 你显然有一些,因为它不工作,它肯定会帮助我们诊断问题! =)

标签: c# .net sql-server winforms windows-vista


【解决方案1】:

如果 MDB 文件位于您的应用程序路径中,则默认权限需要提升权限才能写入文件——我建议将数据移动到 ApplicationData 共享文件夹,最终用户将拥有默认写权限

【讨论】:

  • 谢谢,我这里用的是这段代码,你知道 FileSystemAccessRule 类 Directory.GetAccessControl(path); 的 Identity 参数吗? dirSec.AddAccessRule(new FileSystemAccessRule("?", FileSystemRights.Read, AccessControlType.Allow)); Directory.SetAccessControl(path, dirSec)
  • @Ambarish 您真的应该考虑将数据文件保存在用于数据的路径中,这将使该步骤变得不必要 - 毕竟您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) 以编程方式检索位置每用户设置(或更改为使用 CommonApplicationData 用于每台机器数据)
  • @Shaw 如何将我的数据库我的文件存储到 C:\ProgramData
【解决方案2】:

Windows XP 和 Windows Vista/7 之间最大的改变是 UAC 的引入,这意味着即使创建为管理员,用户也不会经常对“重要”位置(例如 @ 987654321@(通常为C:\Program FilesC:\Program Files (x86))目录。这就是为什么您的应用程序可以在 Windows XP 而不是 Windows Vista 上运行的原因。

如果数据在机器上的用户之间共享或%appdata%(通常是@987654327 @) 如果它特定于给定用户。您现在将不再遇到无法写入文件的问题。

原因是将数据存储在程序安装目录中,您做错了事情。 Windows 之前并没有阻止您这样做,但有相当广泛的记录表明%programfiles% 不是存储数据的合适位置。

【讨论】:

  • 是的,亲爱的@Ambarish 它确实有效;但是你为什么不把它标记为答案呢?
【解决方案3】:

转到安装程序的文件夹,然后右键单击数据库文件和属性 -> 安全 -> 组或用户名(一一点击用户,权限见下文)

如果用户未设置为完全控制,则单击编辑 -> 选择用户并给予完全控制..

【讨论】:

    【解决方案4】:

    我遇到了这个与localdb有关的,文件名为:

    myfolder/mysolution/myproject/App_Data/something.mdf
    

    我修复它的方法是右键单击顶级文件夹(myfolder)然后选择Properties,然后选择Edit,然后选择Users,将Modify添加到用户权限或Modify 和完全控制(这是一个开发环境),然后点击应用。

    也就是说,根据我的经验,将 localdb 放在哪个文件夹中并不重要,您只需要授予用户写入权限即可。

    【讨论】:

      【解决方案5】:

      您应该将 IIS_IUSRS 用户的修改 权限添加到 *.mdf 文件中。

      【讨论】:

        猜你喜欢
        • 2013-01-14
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多