【问题标题】:programmatically change mysql connection string using c#使用 c# 以编程方式更改 mysql 连接字符串
【发布时间】:2012-06-12 03:58:09
【问题描述】:

我想在运行时更改 app.setting 连接字符串。我有一些代码可以更改它,但我不能这样做。运行时没有出现错误。但是执行过程中没有变化。

这是我的部分代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="Punch_Uploader.Properties.Settings.testConnectionString"
            connectionString="server=localhost;User Id=root;password=test123;database=test"
            providerName="MySql.Data.MySqlClient" />
        <add name="Punch_Uploader.Properties.Settings.testConnectionString1"
            connectionString="server=172.23.2.52;User Id=root;password=test123;database=test"
            providerName="MySql.Data.MySqlClient" />
    </connectionStrings>
</configuration>

还有:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings.Add(
    new ConnectionStringSettings("Punch_Uploader.Properties.Settings.testConnectionString2", 
        String.Format(
            "server={0};Port={1}; database={2};User Id={3};password={4};providerName={5}", 
            "172.23.2.32", "3306", "test", "root", "test123", "MySql.Data.MySqlClient")
        )
);
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("connectionStrings"); 

MessageBox.Show(ConfigurationManager
    .ConnectionStrings["Punch_Uploader.Properties.Settings.testConnectionString2"]
    .ConnectionString);

上面的代码对我不起作用....

请帮我解决这个问题。

【问题讨论】:

标签: c# asp.net app-config


【解决方案1】:

连接字符串是只读的。 要更改连接字符串,您需要手动将更改保存回配置文件,这将导致应用程序重新启动。

编辑:快速搜索,我发现了这个(可能会有所帮助):connection string at runtime

【讨论】:

  • 这绝对不是真的。在运行时无法对实际配置文件进行任何更改,但是使用原始帖子评论中提到的 ConnectionStringBuilder 类,您可以轻松地修改内存中的连接字符串。我已经在几个应用程序中使用了这种方法,通过操作连接字符串来更改数据源,在开发和测试数据库之间切换。
  • 取决于他想做什么。我以为他想保存对配置文件的更改?
  • 据我所知,您无法保存对配置文件的更改。你只能在内存中操作它的值。
【解决方案2】:

试试这个,

 Configuration webConfig = WebConfigurationManager.OpenWebConfiguration("~");
 ConnectionStringsSection section = webConfig.GetSection("connectionStrings") as            
                                              ConnectionStringsSection;
 if (section != null)
 {
   section.ConnectionStrings["NameTheCnStr"].ConnectionString = "New Connection string here";
   webConfig.Save();
  }

【讨论】:

    【解决方案3】:
    ConnectionStringSettings settings =
        ConfigurationManager.ConnectionStrings["Punch_Uploader.Properties.Settings.testConnectionString"];
    
    string connectString = settings.ConnectionString;    
    
    SqlConnectionStringBuilder builder =
            new SqlConnectionStringBuilder(connectString);
    
    builder.DataSource = "172.23.2.52:3306";
    builder.InitialCatalog = "test";
    builder.UserID = "root";
    builder.Password = "test123";
    

    正如前面回答的评论中提到的,我可以确认此方法有效,因为我以前使用它在不同的数据库环境之间切换。

    【讨论】:

      【解决方案4】:

      试用此代码

       private void UpdateConnectionString(string ConfigPath)
       {
           XmlDocument xmlDocument = new XmlDocument();
           xmlDocument.Load(ConfigPath);
            XmlNode parentNode = xmlDocument.DocumentElement;
           if (parentNode.Name == "connectionStrings")
           {
              foreach (XmlNode childNode in parentNode.ChildNodes)
              {
                 if (childNode.Name == "add" && childNode.Attributes["name"].Value=="Punch_Uploader.Properties.Settings.testConnectionString")
                 {
                   string sqlConnectionString =childNode.Attributes["connectionString"].Value;
                   SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(sqlConnectionString);
                   sqlBuilder.InitialCatalog = "yourDatabaseName";
                   sqlBuilder.IntegratedSecurity = true;
                   sqlBuilder.Password = "";
      
                   //Change any other attributes using the sqlBuilder object
                   childNode.Attributes["connectionString"].Value = sqlBuilder.ConnectionString;
                 }
              }
            }
            xmlDocument.Save(ConfigPath);
        }
      

      configPath 是来自 Web.config 的连接字符串的路径

      string configPath  = ConfigurationManager.ConnectionStrings["Punch_Uploader.Properties.Settings.testConnectionString"].ConnectionString;
      

      【讨论】:

      • CofigPath 是 Web.config 的路径
      • 现在正在使用下面的代码。当我更改 IP 时,它工作正常。 Properties.Settings.Default["testConnectionString"] = String.Format("server={0};Port={1}; database={2};User Id={3};password={4}", "172.23 .2.32”、“3306”、“sunhrm”、“root”、“test123”);。现在我更改数据库名称意味着它不工作。我该如何解决这个错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多