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

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

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

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

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

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

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

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

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

 myfolder/mysolution/myproject/App_Data/something.mdf 

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

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

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

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