如何在 C# 中更新 app.config 连接字符串数据源值?

Posted

技术标签:

【中文标题】如何在 C# 中更新 app.config 连接字符串数据源值?【英文标题】:How can i update app.config connectionstring Datasource value in C#? 【发布时间】:2011-11-02 17:28:08 【问题描述】:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["MyConnectionString",String.Format("DataSource=0;")].ConnectionString=textBox1.Text;
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("connectionStrings");

我在第二行遇到了麻烦。我似乎无法使语法正确。如您所见,我只想更新 DataSource 值。例如,如果当前值为 Data Source=PC001\SQL2008EXPRESS,我希望它更新为客户端在 textBox1 中输入的内容。

编辑:示例连接字符串

<add name="ERPDatabaseTables" connectionString="metadata=res://*/ERPTables.csdl|res://*/ERPTables.ssdl|res://*/ERPTables.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=PC001\SQL2008EXPRESS;Initial Catalog=MyDatabase.mdf;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/>

所以只想更新 Data Source=PC001\SQL2008EXPRESS 部分

【问题讨论】:

【参考方案1】:

你真正想要的是:

Configuration config = 
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Because it's an EF connection string it's not a normal connection string
// so we pull it into the EntityConnectionStringBuilder instead
EntityConnectionStringBuilder efb = 
    new EntityConnectionStringBuilder(
        config.ConnectionStrings.ConnectionStrings["ERPDatabaseTables"]
            .ConnectionString);

// Then we extract the actual underlying provider connection string
SqlConnectionStringBuilder sqb = 
    new SqlConnectionStringBuilder(efb.ProviderConnectionString);

// Now we can set the datasource
sqb.DataSource = textBox1.Text;

// Pop it back into the EntityConnectionStringBuilder 
efb.ProviderConnectionString = sqb.ConnectionString;

// And update...
config.ConnectionStrings.ConnectionStrings["ERPDatabaseTables"]
    .ConnectionString = efb.ConnectionString;

config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("connectionStrings");

这假定:

    您的 EF 连接字符串存在于应用的配置文件中

    您有对System.Data.Entity的引用

【讨论】:

是的,这就是我想要的,但没有保存更改,也没有抛出异常。即使刷新后,应用程序仍在使用旧数据源检索数据。这是安装在客户端 PC 上的 Windows 窗体应用程序 @sql.net - 抱歉错过了保存配置的代码行,已更新 看起来我到了那里,但收到异常消息“不支持关键字:'datasource'” 我还应该提到它是一个实体框架连接字符串 @ Kev Ω - 不支持关键字:“数据源”错误仍然出现

以上是关于如何在 C# 中更新 app.config 连接字符串数据源值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 app.config 文件定义连接字符串 [重复]

c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新

如何从 C# 读取 VB.NET 项目中的“app.config”文件

在 Visual Studio 中为 C# 更新 App.Config 文件的最佳方法是啥? [复制]

Azure 函数 - 如何在 app.config 中添加我的数据库连接字符串

是否可以(以及如何)在 C# 运行时将 ConnectionString 添加到 app.config?