简体   繁体   中英

Reload web.config after updating connectionstring programmatically in C#

I have created Connectionstring in web.config at run time. Now I am saving some data into my DB but it is still reading old Connectionstring. How can I solve this? below is my code:

public string EditConnectionString(string userId, string password, string host, string dbName)
{
    try
    {
        System.Configuration.Configuration Config = WebConfigurationManager.OpenWebConfiguration("~");
        ConnectionStringsSection conSetting = (ConnectionStringsSection)Config.GetSection("connectionStrings");
        string providerName = "System.Data.EntityClient";
        string conString = @"metadata=res://*/OWordpress.csdl|res://*/OWordpress.ssdl|res://*/OWordpress.msl;provider=System.Data.SqlClient;provider connection string=" + "\"data source=" + host + ";initial catalog=" + dbName + ";user id=" + userId + ";password=" + password + ";MultipleActiveResultSets=True;App=EntityFramework\"";
        ConnectionStringSettings StringSettings = new ConnectionStringSettings("OWordpressContainer", conString,providerName);
        conSetting.ConnectionStrings.Remove(StringSettings);
        conSetting.ConnectionStrings.Add(StringSettings);
        Config.Save(ConfigurationSaveMode.Modified);

        return MessageFamily.Success.ToString();
    }
    catch(Exception ex)
    {
        return ex.Message.ToString();
    }
}

After creating Connectionstring I am saving some data as below but it still read old connectionstring values:

public string SaveDbInfo(string userId, string password, string host, string dbName)
{
    try
    {
        var optionEntity = new Options();

        optionEntity.key = "DBInfo";
        optionEntity.value = "{userId:'" + userId + "',password:'" + password + "',host:'"+host+"',dbName:'"+dbName+"'}";

        objContext.Options.Add(optionEntity);
        objContext.SaveChanges();
        return MessageFamily.Success.ToString();
    }
    catch(Exception ex)
    {
        return ex.Message.ToString();

    }
}

I solve this issue by using EntityConnectionStringBuilder

var ecsBuilder = new EntityConnectionStringBuilder(ConfigurationManager.ConnectionStrings["OWordpressContainer"].ToString());

var sqlCsBuilder = new SqlConnectionStringBuilder(ecsBuilder.ProviderConnectionString)
{
    InitialCatalog = dbName,
    UserID=userId,
    DataSource=host,
    Password=password
};

var providerConnectionString = sqlCsBuilder.ToString();                
ecsBuilder.ProviderConnectionString = providerConnectionString;    
string contextConnectionString = ecsBuilder.ToString();   

using (var db = new DbContext(contextConnectionString))
{
    OWordpressContainer objContext = new OWordpressContainer(contextConnectionString);    
    var optionEntity = new Options();    
    optionEntity.key = "DBInfo";    
    optionEntity.value = "{userId:" + userId + "',password:'" + password + "',host:'" + host + "',dbName:'" + dbName + "'}";    
    objContext.Options.Add(optionEntity);    
    objContext.SaveChanges();
}

更改连接字符串后,尝试以下代码,让我知道它是否有帮助-

ConfigurationManager.RefreshSection("connectionStrings");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM