我在C#中创建了一个数据库窗口应用程序。我的应用程序在Windows XP上成功运行,但在Vista或Windows 7系统上无法正常执行。我的应用程序显示类似的消息
无法更新.mdf数据库,因为数据库是只读的
任何人都可以给我一个解决方案吗?
如果MDB文件位于应用程序路径中,则默认权限需要提升权限以便能够写入文件 - 我建议将数据移动到ApplicationData共享文件夹,最终用户将拥有写入权限默认
在Windows XP和Windows Vista / 7之间发生重大变化的是UAC的引入,这意味着用户即使作为管理员创建,也不会经常对“重要”位置(例如%programfiles%
)进行读/写访问(通常是C:\Program Files
或C:\Program Files (x86)
)目录。这就是您的应用程序在Windows XP上运行而不在Windows Vista上运行的原因。
如果数据在机器上的用户或%programdata%
(通常是C:\ProgramData
)之间共享(如果特定于给定用户),则需要将数据存储在%appdata%
目录(通常为C:\Users\USERNAME_GOES_HERE\AppData\Roaming
)中。您现在不再遇到无法写入文件的问题。
原因是通过在程序安装目录中存储数据,你做错了。 Windows并没有阻止你以前这样做,但是有相当广泛记载的%programfiles%
不是存储数据的合适位置。
我遇到了与localdb相关的文件,命名为:
myfolder/mysolution/myproject/App_Data/something.mdf
我修复它的方法是右键单击顶级文件夹(myfolder
),然后选择Properties
,然后选择Edit
,然后选择Users
,向用户添加Modify
权限或同时添加Modify
和完全控制(这是一个开发环境) )然后单击“应用”。
换句话说,根据我的经验,将localdb放入哪个文件夹并不重要,您只需要授予用户写入权限。
您应该将IIS_IUSRS用户的修改权限添加到* .mdf文件。
转到安装程序的文件夹并右键单击数据库文件,然后单击属性 - >安全性 - >组或用户名(逐个单击用户,并查看权限)
如果用户未设置为完全控制,则单击编辑 - >选择用户并完全控制..