1

"Permission denied"连接到.sdf文件时出现异常。

我正在使用这个连接字符串。

connection string="Data Source=|DataDirectory|\DB.sdf;Password='something';Mode = Read Only;Temp Path= Environment.GetFolderPath(Environment.SpecialFolder.Templates);Persist Security Info=True"" providerName="System.Data.EntityClient" />

这在 Win 7 上可以正常工作,但是当我在 Win XP 上运行我的应用程序时,它会返回

没有权限

例外

我为临时文件尝试了不同的地址,但仍然失败。所有这些选项都是正确的

  1. 数据库文件的路径存在于 xp 机器上
  2. 我有权在给定目录中创建临时文件
  3. 我提供了正确的密码。

这个问题发生在数据库连接字符串设置为只读时。我找到了一些解决方案,但我不能使用它们:

解决方案1:

这是关于这个的独家新闻。当我们将 SDF 文件从 XP 移动到 Vista 时,由于 NLS 版本的更改,我们尝试以读写模式打开文件以重写索引(如果存在)。这仅在从 XP 到 Vista 的移动中第一次打开时发生。因此,一个简单的解决方法是暂时将文件更改为读写模式,在 Vista 上打开它并将其恢复为只读。

我无法使用此解决方案,因为我的应用程序从 DVD 运行。

解决方案2:

有 3 个 sdf 文件,一个用于 XP/Server 2003,一个用于 Vista/Server 2008/Win7,一个用于 win 8

这也很糟糕,因为我在应用程序 DVD 上没有可用空间来执行此操作。

任何人都有解决这个问题的好主意。

4

2 回答 2

0

将文件复制到可以写入的位置,然后从文件中删除只读属性。连接到这个文件。

Environment.SpecialFolder可以调用 withSpecialFolder.LocalApplicationData来获得合适的位置。

Path.GetTempPath在这方面也可能有用。

于 2013-01-10T08:40:15.720 回答
0

您需要在 DVD 上拥有 2 份数据库文件副本,一份用于 XP/Server 2003,一份用于 Vista 及更高版本。或者在应用程序首次启动时将数据库复制到可写位置。同样的问题适用于 SQL Server Compact 4.0

于 2013-01-10T08:41:39.640 回答