无法更新.mdf数据库,因为数据库是只读的(Windows应用程序)

时间:2011-04-19 08:10:00

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

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

的消息
  

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

任何人都可以给我一个解决方案吗?

5 个答案:

答案 0 :(得分:8)

Windows XP和Windows Vista / 7之间的重大变化是UAC的引入,这意味着用户即使作为管理员创建,也不会经常对“重要”位置(例如{)进行读/写访问。 {1}}(通常是%programfiles%C:\Program Files)目录。这就是您的应用程序在Windows XP上运行而不在Windows Vista上运行的原因。

如果数据在计算机上的用户之间共享或C:\Program Files (x86),您需要将 DATA 存储在%programdata%目录(通常为C:\ProgramData)中(如果它特定于给定用户,则通常为%appdata%)。您现在不再遇到无法写入文件的问题。

原因是通过在您的程序安装目录中存储数据做错了 。 Windows并未阻止您以前执行此操作,但有相当广泛的文档证明C:\Users\USERNAME_GOES_HERE\AppData\Roaming不适合存储数据。

答案 1 :(得分:1)

如果MDB文件在您的应用程序路径中,则默认权限需要提升权限以便能够写入文件 - 我建议将数据移动到ApplicationData共享文件夹,最终用户将拥有该文件夹默认情况下写入权限

答案 2 :(得分:0)

我遇到了与localdb相关的文件,该文件命名为:

string.replace

我修复它的方法是右键单击顶级文件夹(myfolder/mysolution/myproject/App_Data/something.mdf ),然后选择myfolder,然后选择Properties,然后选择Edit,向用户添加Users权限或同时Modify和完全控制(这是开发环境),然后单击“应用”。

换句话说,根据我的经验,将localdb放入哪个文件夹并不重要,您只需要授予用户写入权限。

答案 3 :(得分:0)

您应该将 IIS_IUSRS 用户的 Modify 权限添加到 *。mdf 文件。

答案 4 :(得分:-1)

转到安装程序的文件夹,然后右键单击数据库文件和Properties - >安全 - >组或用户名(逐个单击用户,并在下面查看权限)

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