【问题标题】:How can i update app.config connectionstring Datasource value in C#?如何在 C# 中更新 app.config 连接字符串数据源值?
【发布时间】: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 部分

【问题讨论】:

    标签: winforms c#-4.0 entity-framework-4 app-config configuration-files


    【解决方案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");
    

    这假定:

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

    2. 您有对System.Data.Entity的引用

    【讨论】:

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