Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WinForm应用程序-如何保存连接字符串(SQLite)_C#_Winforms_Connection String_Privileges - Fatal编程技术网

C#WinForm应用程序-如何保存连接字符串(SQLite)

C#WinForm应用程序-如何保存连接字符串(SQLite),c#,winforms,connection-string,privileges,C#,Winforms,Connection String,Privileges,我在.NET4.0中有一个带数据库(SQLite)的winform应用程序。我需要为用户添加一个选项,以便能够更改包含数据库的文件的路径——简言之,更改连接字符串。我使用app.config保存连接字符串,如下所示: <connectionStrings> <add name="connectionString" connectionString="Data Source=D:\myDatabase.db; FailIfMissing=True; Version=3"/>

我在.NET4.0中有一个带数据库(SQLite)的winform应用程序。我需要为用户添加一个选项,以便能够更改包含数据库的文件的路径——简言之,更改连接字符串。我使用app.config保存连接字符串,如下所示:

<connectionStrings>
<add name="connectionString" connectionString="Data Source=D:\myDatabase.db; FailIfMissing=True; Version=3"/>
</connectionStrings>
问题是当用户不是管理员时,对文件的访问被拒绝。是否有解决方法(我不想以管理员身份运行应用)?还是有更好的方法来存储我的连接字符串?

这可能会有帮助:

private static void UpdateSetting(string key, string value)
{
    Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    configuration.AppSettings.Settings[key].Value = value;
    configuration.Save();

    ConfigurationManager.RefreshSection("appSettings");
}

发件人:

您应该使用特殊文件夹。LocalApplicationData(适用于当前用户-仅本地)或ApplicationData(适用于当前用户-漫游):

这是您应该将路径\连接字符串存储到用户选择的db文件的位置。这些文件夹是为Windows操作系统上的所有用户配置文件创建的。例如,如果您的登录名为“Hari”,则路径将为“C:\Users\Hari\AppData\Local”。Hari完全可以访问此路径,因此他可以对其进行写入

此外,这允许多个用户使用您的软件。他们不会互相踩踏。他们都有自己的数据库文件。如果这不是您想要的,那么您可以使用此处提到的其他特殊文件夹(如CommonApplicationData):


但是,要使用其中一些,您可能必须拥有管理员权限。(对于我上面描述的两个特殊文件夹,您不需要管理员权限。)在这种情况下,您可以在安装时询问DB文件路径。

我认为您要做的是使用设置(而不是使用app.config)。见此:

它基本上与配置文件相同,但用户(和您)可以轻松访问它

首先在设计器中设置默认连接字符串:

然后像
textBox1.Text=Properties.Settings.Default.connectionString一样访问它

按相反方式保存它:
Properties.Settings.Default.connectionString=textBox1.Text


并确保保存:
Properties.Settings.Default.save()

我尝试使用ConfigurationManager,问题是当用户不是管理员并且对app.config文件的访问被拒绝时。您确定这不是特定于调试器的问题吗?您是否尝试过在调试环境之外运行应用程序?这样的事情发生是没有道理的。尝试以管理员的身份运行它。那么如何从设置中获取连接字符串?对于app.config,我使用了字符串conn=ConfigurationManager.connectionString[“connectionString”].connectionString;
private static void UpdateSetting(string key, string value)
{
    Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    configuration.AppSettings.Settings[key].Value = value;
    configuration.Save();

    ConfigurationManager.RefreshSection("appSettings");
}
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)