繁体   English   中英

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

[英]C# WinForm application - How to save connection string (SQLite)

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

<connectionStrings>
<add name="connectionString" connectionString="Data Source=D:\myDatabase.db; FailIfMissing=True; Version=3"/>
</connectionStrings>

有没有办法允许用户修改app.config文件(位于Program Files文件夹中)? 我不想以管理员身份运行该应用程序,是否有一种方法可以仅在尝试修改app.config文件时才临时向用户授予管理员权限?

如果您对持久存储连接字符串有更好的建议,请分享。

谢谢!

编辑:我实际上可以更改app.config文件:

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = "Data Source=" + path + "; FailIfMissing=True; Version=3";
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");

问题是当用户不是管理员时,对文件的访问被拒绝。 有没有解决方法(我不想以管理员身份运行该应用程序)? 还是有更好的方法来存储我的连接字符串?

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

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

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

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

https://msdn.microsoft.com/en-us/library/system.environment.specialfolder%28v=vs.110%29.aspx

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

我认为您要使用的是“设置”(而不是使用app.config)。 看到这个: https : //msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx

它与配置文件基本相同,但是使用户(和您)易于访问。

首先在设计器中设置一个默认的连接字符串: 在此处输入图片说明

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

进行相反的操作以保存它: Properties.Settings.Default.connectionString = textBox1.Text;

并确保保存: Properties.Settings.Default.Save();

这可以帮助:

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");
}

来自: App.Config更改值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM