Winforms 无法更新数据库,因为该数据库是只读的

Winforms 无法更新数据库,因为该数据库是只读的,winforms,sql-server-2012,localdb,Winforms,Sql Server 2012,Localdb,我创建了一个winform应用程序,并试图在应用程序第一次运行时以编程方式连接数据库。不幸的是,在Windows7中,我总是出错。请查看下面的屏幕截图,它讲述了整个故事。现在我的问题是,我如何摆脱这个错误,是否有任何方法可以自动为应用程序安装的文件夹授予所需的权限?。我想永久解决这个错误,需要顺利附件。任何人都请帮忙 请查看下面的错误。提前谢谢 尝试将数据库MyDatabaseName设置为读写 更多信息请点击这里 编辑 如果将数据库放在由环境.GetFolderPath(Environment

我创建了一个winform应用程序,并试图在应用程序第一次运行时以编程方式连接数据库。不幸的是,在Windows7中,我总是出错。请查看下面的屏幕截图,它讲述了整个故事。现在我的问题是,我如何摆脱这个错误,是否有任何方法可以自动为应用程序安装的文件夹授予所需的权限?。我想永久解决这个错误,需要顺利附件。任何人都请帮忙

请查看下面的错误。提前谢谢


尝试
将数据库MyDatabaseName设置为读写

更多信息请点击这里

编辑

如果将数据库放在由
环境.GetFolderPath(Environment.SpecialFolder.LocalApplicationData
返回的目录的自己的子目录中,则用户将具有对它的读/写访问权限

请参阅以确定不同的位置是否更合适,例如,如果您需要它漫游,请参阅
ApplicationData
;如果您需要计算机的所有用户使用它,请参阅
CommonApplicationData


编辑:我找到了这个答案的一个更广泛的版本:,也请查看它链接到的文章。

我知道这个答案有些晚了,但我相信人们总是面临同样的问题,所以我的案例值得分享

tl;dr=手动更改已部署文件的权限或使用icacls命令

实际上,我用于打包和部署我的应用程序。 无论使用什么setup creator,当应用程序安装到非系统文件夹(例如D:\)时,程序都能正常工作,数据库可读写

而当应用程序安装在[Program Files]文件夹或[Program Files(X86)]文件夹中时,Windows会采取预防性安全措施,并将文件权限设置为仅为[Read]和[Read&Execute]

我认为WindowsVista和更高版本的Windows都有这种行为

您可以通过右键单击安装的文件,进入属性,然后进入安全选项卡来检查

我在D:\s上安装的文件具有完全控制权限,而正如我提到的,在C:\s上安装的文件只有读取和执行权限

在C:\上安装普通程序时,您不会注意到差异,因为您可能没有在文件或数据库上写入数据。但在部署数据库时,文件必须是可写的

最后,此案例的解决方案是告诉InstallForge在安装结束时使用icacls命令更改文件权限:

icacls "C:\MyApp\MyDB.mdf" /Grant Everyone:F
icacls "C:\MyApp\MyDB_log.ldf" /Grant Everyone:F
在我的案例中,可以让每个人完全控制数据库文件,但您可能需要针对您的案例定制解决方案,因此请参考:


您可以告诉您的安装创建者运行这些命令,或者您可以将它们放在一个批处理文件中,并在安装后运行。

谢谢您的回复。我的问题不同,我在安装应用程序的文件夹上有一个读写问题。您的解决方案在出现问题后仍然有效,但我需要在出现问题之前解决这个问题curred。我的意思是,每当应用程序安装时,它已经在安装应用程序的特定文件夹上拥有读写权限,因此我永远不会面对这个问题,谢谢。我有一个Sql server 2012 LocalDB。当我运行alter query时,它会运行很长时间,并且从不给出结果。如何在LocalDB中运行alter?alter database[C:\PROJECT POS\PROJECTPOS\BIN\DEBUG\DATABASE\UNIVERSAL\u DATA.MDF]设置读写…当我运行此查询时,它现在给出以下错误:-用户无权更改数据库“C:\PROJECT POS\PROJECTPOS\BIN\DEBUG\database\UNIVERSAL_DATA”,数据库不存在,或者数据库未处于允许访问检查的状态。我可以在sql server management studio中看到此数据库,显示为深灰色(只读)图像,谢谢您是否以管理员身份登录?(工作室和应用程序)。您尝试过我添加到我的答案中的链接的解决方案吗?谢谢您的回复,我对这些特殊文件夹有所了解。但是您认为除了安装应用程序的应用程序文件夹之外,将应用程序数据库放在这些文件夹中是最好的选择吗?@user3004110是的。这将使其正常工作,并遵循Microsoft的指导原则或存储数据的位置。应用程序文件夹应为只读(对于普通用户)阻止恶意软件。谢谢Andrew,我快结束了,但请告诉我一件事。当我安装应用程序时,数据库文件也放在应用程序文件夹中,我有另一个文件夹名database。现在我的问题是,我应该怎么做才能将此数据库文件夹移动到特殊文件夹?我应该按程序从应用程序中移动吗当应用程序第一次运行时,将文件夹转到特殊文件夹?或者还有其他更好的方法?@user3004110从这里开始:。如果搜索Google等无法解决问题,任何关于它的进一步问题都可能需要一个新问题。