2012-06-08 21 views
1

我想在運行時更改app.setting連接字符串。我有一些代碼來改變它,但我不能這樣做。在運行期間不會出現錯誤。但執行期間沒有變化。以編程方式更改使用c的mysql連接字符串#

這是我的部分代碼:

<?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); 

上面的代碼是不是爲我工作....

請幫我解決這個問題。

+2

你需要看看[ConnectionStringBuilder](http://msdn.microsoft.com/ en-us/library/ms254947.aspx)類。 – LeopardSkinPillBoxHat

回答

2
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"; 

正如在評論中提及到以前的回答我可以證實這種方法像我之前使用過的那樣在不同的數據庫環境之間切換。

0

連接字符串是隻讀的。 要更改連接字符串,您需要將更改手動保存回配置文件,這將導致應用程序重新啓動。

編輯:快速搜索,我發現這個(可能會有所幫助):connection string at runtime

+0

這是絕對不正確的。在運行時不會對實際配置文件進行更改,但使用原始帖子評論中提到的ConnectionStringBuilder類可以輕鬆修改內存中的連接字符串。我在幾個應用程序中使用了這種方法,通過操縱連接字符串來更改數據源,從而在開發和測試數據庫之間切換。 –

+0

取決於他想做什麼。我以爲他想保存對配置文件的更改? –

+0

據我所知,你不能保存對配置文件的更改。你只能在內存中操作它的值。 –

0

試試這個,

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

從Web.config中

嘗試這種代碼

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來連接字符串的路徑

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

配置路徑是什麼意思... – Amulraj

+0

CofigPath是Web.config的路徑 – dhiraj

+0

現在我正在使用下面的代碼。當我改變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「);現在我改變數據庫名稱意味着它不工作。我該如何解決這個錯誤 – Amulraj

相關問題