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

本文关键字:数据库 Windows 应用程序 只读 mdf 失败 因为 更新 | 更新日期: 2023-09-27 17:50:27

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

的消息

更新.mdf数据库失败,因为数据库是只读的

谁能给我一个解决这个问题的方法?

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

Windows XP和Windows Vista/7之间最大的变化是引入了UAC,这意味着用户即使被创建为管理员,也不能常规地对"重要"位置(如%programfiles%(通常是C:'Program FilesC:'Program Files (x86))目录)具有读/写访问权限。这就是为什么你的应用程序可以在Windows XP上运行而不能在Windows Vista上运行。

如果数据在机器上的用户之间共享,则需要将DATA存储在%programdata%目录(通常是C:'ProgramData)中,如果数据特定于给定用户,则需要将其存储在%appdata%目录(通常是C:'Users'USERNAME_GOES_HERE'AppData'Roaming)中。现在,您将不再遇到无法写入文件的问题。

这样做的原因是通过将数据存储在程序安装目录中,做了错误的事情。Windows以前并没有阻止您这样做,但是有相当多的文档证明%programfiles%不是存储数据的合适位置。

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

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

myfolder/mysolution/myproject/App_Data/something.mdf

我固定它的方式是右键单击顶层文件夹(myfolder),然后选择Properties,然后选择Edit,然后选择Users,向用户添加Modify权限或Modify和完全控制(这是一个开发环境),然后单击应用。

换句话说,根据我的经验,你把localdb放在哪个文件夹并不重要,你只需要给Users写的权限。

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

进入安装程序的文件夹,右键单击数据库文件和属性->安全->组或用户名(依次单击用户,查看下面的权限)

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