【问题标题】:update connectionstring in app.config file at run time in C#在 C# 运行时更新 app.config 文件中的连接字符串
【发布时间】:2012-07-23 14:14:48
【问题描述】:

我创建了一个应用程序,并在该应用程序中插入、更新和删除数据库中的数据操作

我还为连接设置创建了一个表单,用户可以在其中更新服务器名称、数据库以及用户 ID 和密码。我已将连接字符串存储在 app.config 文件中。

我的问题是,如何在运行时更新 app.config 文件中的连接字符串?

【问题讨论】:

标签: c# connection-string


【解决方案1】:

你可以试试这个:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings("MyConnectionString",String.Format("DataSource={0};InitialCatalog={1};IntegratedSecurity={2}","testing", "testing2", "Testing6")));
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("connectionStrings");

【讨论】:

  • 请注意,这将编辑 bin 文件夹中的配置文件 - 如果您使用多次尝试,您可能需要使用其他方法
  • 谢谢@Ruskin 我想知道为什么我的配置没有更新:)
【解决方案2】:

你可以试试这个:

private void changeValue(String KeyName, String KeyValue)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Update the setting.
config.AppSettings.Settings[KeyName].Value = KeyValue;

// Save the configuration file.
config.Save(ConfigurationSaveMode.Modified);

// Force a reload of the changed section.
ConfigurationManager.RefreshSection("appSettings");
}

【讨论】:

  • 感谢您的回复,但我不明白它应该在我的应用程序中写入的位置。我在 button_click 事件中添加了此代码,但给了我错误。错误是 名称“ConfigurationUserLevel”确实在当前上下文中不存在 和许多其他的
  • 您是否将 ConfigurationManager dll 添加到您的项目中?
  • 谢谢先生,我的连接字符串正在更新,但是关闭应用程序后,再次打开,我看到我的连接字符串与更新前一样。
  • 此示例适用于 条目,而不适用于每个帖子的
【解决方案3】:

我相信您的 App.Config 没有更新,因为它正在使用 vshost。我今天遇到了这个问题,我尝试了这篇文章的解决方案,但是在 VisualStudio 上运行,所以文件是一样的。在 VS 之外,它是一种魅力。

【讨论】:

    【解决方案4】:

    App.cofig 代码

          <?xml version="1.0" encoding="utf-8"?>
            <configuration>
         <configSections>
                <section name="dataConfiguration"type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral,        PublicKeyToken=b03f5f7f11d50a3a" />
         </configSections>
        <connectionStrings>
      <add name="DbDatabase" providerName="System.Data.SqlClient" connectionString=""/>
    </connectionStrings>
    

    C#代码

       public void updateConfigFile(string con)
        {
            //updating config file
            XmlDocument XmlDoc = new XmlDocument();
            //Loading the Config file
            XmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
           // XmlDoc.Load("App.config");
            foreach (XmlElement xElement in XmlDoc.DocumentElement)
            {
                if (xElement.Name == "connectionStrings")
                {
                    //setting the coonection string
                    xElement.FirstChild.Attributes[2].Value = con;
                }
            }
            //writing the connection string in config file
            XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
            //XmlDoc.Save("App.config");
        }
    
    
    
     private void btn_Connect_Click(object sender, EventArgs e)
        {
            StringBuilder Con = new StringBuilder("Data Source=");
            Con.Append(txt_ServerName.Text);
            Con.Append(";Initial Catalog=");
            Con.Append(txt_DatabaseName.Text);
            if (String.IsNullOrEmpty(txt_UserId.Text) &&String.IsNullOrEmpty(txt_Password.Text))
                Con.Append(";Integrated Security=true;");
            else
            {
                Con.Append(";User Id=");
                Con.Append(txt_UserId.Text);
                Con.Append(";Password=");
                Con.Append(txt_Password.Text);
            }
            string strCon = Con.ToString();
            updateConfigFile(strCon);
    
            DatabaseTableDA da = new DatabaseTableDA();
            tableList = da.Select_Tables();
            this.lstTables.DataSource = tableList;
        }
    

    【讨论】:

      【解决方案5】:
       var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
       var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
       connectionStringsSection.ConnectionStrings["ClientCN"].ConnectionString = "server=localhost;user=root;port=3306;password=abc";
       config.Save();
        ConfigurationManager.RefreshSection("connectionStrings");
      

      【讨论】:

        【解决方案6】:

        试试这个:

        var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
        connectionStringsSection.ConnectionStrings["ClientCN"].ConnectionString = "server=localhost;user=root;port=3306;password=abc";
        config.Save();
        ConfigurationManager.RefreshSection("connectionStrings");
        

        【讨论】:

          猜你喜欢
          • 2017-08-12
          • 2012-04-30
          • 2010-10-04
          • 1970-01-01
          • 1970-01-01
          • 2013-12-11
          • 2016-08-04
          • 2023-04-04
          • 2019-02-27
          相关资源
          最近更新 更多