在 Visual Studio 2010 C# 中不允许访问数据库文件 (SQL Server Compact)

Posted

技术标签:

【中文标题】在 Visual Studio 2010 C# 中不允许访问数据库文件 (SQL Server Compact)【英文标题】:Access to database file not allowed (SQL Server Compact) in Visual Studio 2010 C# 【发布时间】:2016-07-05 18:44:08 【问题描述】:

第一点:我相信这个问题已经回答了here,但它并没有解决我的问题。由于我的声誉低于 50 分,因此我(目前)还不能对这个问题发表评论。

当我的程序安装在没有管理员权限的计算机上时,它会抛出此错误

不允许访问数据库“PayeeList.SDF”

在App Manifest中,我以管理员身份添加启动程序,这个问题没有出现,但是当我启动我的程序并且它要求管理员权限时有点烦人,我希望我的程序在没有管理员权限的情况下运行.

这些是我的文件安装属性和下面我的数据库的文件属性。

第二点:

如果我这样做正确,请告诉我。

*** 上原问题的解决方案:

确保使用 |DataDirectory|在您的连接字符串中。这是 一个例子

connectionString="数据源=|DataDirectory|MyDB.sdf"

如果我改变它,这会解决我的问题吗?

第三点:点击确定后还是会出现这个错误。

需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

可能需要考虑两件事:

    安装目录: 如果没有管理员权限,Windows 将不允许更改安装目录中的任何文件(Program Files 或 Program Files (x86))。

    您可以创建自己的目录并将数据库存储在:

    用户目录\AppData\Roaming\

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

    当前登录用户可以访问。

    您可以使用的所有用户:

    C:\ProgramData

    Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

    所有用户都可以访问。

    连接字符串: 您可以将连接字符串存储在全局静态属性或变量中,以便在当前应用程序中轻松访问它。 您可以使用 Application.StartupPath 获取当前应用程序目录。

或者您可以在 App.config 文件中修改您的连接字符串:

也可以使用代码设置dataDirectory路径:

 string path =Application.StartupPath; // or Any Path
 AppDomain.CurrentDomain.SetData("DataDirectory", path);

【讨论】:

这是我在 app.config 中的连接字符串 <connectionStrings> <add name="MyApp.Properties.Settings.PayeeListConnectionString" connectionString="Data Source=|DataDirectory|\PayeeList.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" /> 如何修改 App.Config 文件中的连接字符串?我要写什么代码? 对不起,问题似乎与我的预期不同,感谢您的回答。我更改了我的异常设置,我发现,默认情况下,我在我的程序文件夹中读取和写入文件,这是不允许的。我应该读/写应用程序文件夹中的文件,我会试试看。

以上是关于在 Visual Studio 2010 C# 中不允许访问数据库文件 (SQL Server Compact)的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 Express C#中的“导航到”在哪里

Visual Studio 2010 C# 表单项目 - 拖放 - 最佳方法?

使用 Visual Studio 2010 C# 的数据透视表

从 Visual Studio 2008 升级到 Visual Studio 2010 速成版

如何使用 C# 在 Visual Studio 2010 中使用正则表达式或 HTMLAgilityPack 抓取 HTML 页面的特定部分?

分析一个用 C++ 编码的 OpenGL 2.0 游戏,入口项目是 C#,全部在 Visual Studio 2010 中?