我在C#中创建了一个数据库窗口应用程序。我的应用程序在Windows XP上成功运行,但在Vista或Windows 7系统上无法正常执行。我的应用程序显示类似于
的消息无法更新.mdf数据库,因为数据库是只读的
任何人都可以给我一个解决方案吗?
答案 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 - >选择用户并给予完全控制..