SQL Compact Edition 3.5 - 不允许访问数据库文件

18

我使用 SQL Server Compact 3.5 开发了一个应用程序(完全本地,没有访问服务器),在我的电脑上运行良好。然而,当我将其部署到另一台计算机时,显示以下错误:

Access to the database file is not allowed. [ File name = data\BDApepucCE.sdf ]

我在一台Windows XP电脑上进行了部署。每当我尝试写入数据库时,它都会显示此错误,但读取时却可以正常工作。

我在一台运行Windows 7的计算机上进行了测试,并且它完全可用,唯一的例外是当通过家庭组(即本地网络)访问文件时,在读/写方面都失败了。

平台:Windows 7、Visual Studio 2010和.NET 4客户端框架


你解决了这个问题吗?我也遇到了同样的问题。 - wangburger
我做过,虽然现在不记得解决方案了。如果你还需要的话,我回家后可能能找到解决方案。 - WoF_Angel
很遗憾,已经过去两天了,我不记得我做了什么来解决它。不过我绕过去了。谢谢。 - wangburger
5
在Windows 7上,将Sdf文件的读/写权限授予IIS_USERS解决了我的问题。 - Brendan Kendrick
1
将读/写权限授予[sdf文件]给[本地计算机]\Users,这解决了我在Win 10上(win-from应用程序)遇到的问题。 - Asaf
9个回答

20

确保在连接字符串中使用 |DataDirectory|。这是一个示例:

connectionString="Data Source=|DataDirectory|MyDB.sdf"

我曾经遇到和你完全相同的问题,通过在连接字符串中添加 |DataDirectory| 来解决了这个问题。

祝你好运。


为了清晰起见,你的答案对我有用,但只需要在文件名前加上 |DataDirectory|,不包括任何星号。 - user74754

16

1
这对我有用。我修改了App_Data目录上的Windows ACL /权限。授予了Authenticated Users权限。 - p.campbell
对我也起作用了,我给文件访问权限,然后就好了。 - Jeterson Miranda Gomes

9

我之前也遇到过这个问题。我的解决方案是,在我部署时,TFS/SourceControl中的sdf文件被检入(即只读),这导致了与上述完全相同的错误。当我检出sdf文件并重新部署时,一切都正常了。如果其他TFS用户遇到同样的问题,我想分享这个解决方案。


很好,但我们需要一段代码来自动化删除“readonly”文件属性,一旦CAB项目构建完成(可能使用Post Build)。 - FindOutIslamNow

4

这里还有两个建议:

  • 尝试以管理员身份运行您的Visual Studio
  • 检查sdf文件是否设置了'readonly'属性

有没有绕过“只读”设置的技巧?我在MSDN上找到了这篇帖子,但它指向了一个失效的链接:http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/d72a020e-bd5e-4f1f-99e3-b77337560021 - user153923

0

这不是典型的原因,但当我的连接字符串指向错误的CE SDF文件路径时,我遇到了这个错误消息。一旦我修正了这个问题,错误就消失了。


0
你可能还想检查一下你的应用程序池是否使用了 Network Service(而不是应用程序池),以及在你的 AppData 文件夹下,Network Service 权限是否设置为完全控制。这是我之前遇到的问题,虽然我忘记了如何解决,但这个问题提醒了我如何解决它。

0

您只需要在IIS菜单“Web服务扩展”下允许“服务器端包含”,问题就都解决了。

这样就可以解决我所有的问题了。


0
以下解决方案对我有效:

在Windows中,“Program Files”受到保护,因此普通用户无法在其中写入,您的应用程序可能仅适用于管理员用户。

将数据库的数据文件夹路径更改为所有用户都具有写入权限的位置。


-1

只需以管理员身份运行您的应用程序。我使用这种方法解决了我的问题。


非常感谢,这解决了我在 LINQPad4 中尝试创建新的 SQL CE 4 数据库时遇到的错误。 - sevenkul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接