覆盖连接字符串值

本文关键字:字符串 连接 覆盖 | 更新日期: 2023-09-27 18:30:57

我正在尝试覆盖MVC解决方案上几个配置文件中的一些值。 我正在做这样的事情:

 config.AppSettings.Settings["Key"].Value =newValue;
 config.Save(ConfigurationSaveMode.Modified);

我的问题是,如何对连接字符串文件做类似的事情?我正在尝试使用此代码。

 System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
    builder["InitialCatalog"] = newValue;

覆盖连接字符串值

有几种方法可以实现此目的。一种简单的方法是创建一个代码,该代码可以根据用户从下拉列表中选择并使用配置文件中预定义的连接字符串集动态确定连接字符串。假设您定义了以下连接字符串,

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <connectionStrings>
    <add name="Development" connectionString="data source=MyDataSource;Initial Catalog=DevDatabase;user id=sa;Pwd=devpassword;"/>
    <add name="Test" connectionString="data source=MyDataSource;Initial Catalog=TestDatabase;user id=sa;Pwd=testpassword;"/>
  </connectionStrings>
</configuration>

现在,您可以使用以下代码来循环访问连接字符串,并根据下拉选择确定应使用哪一个

string selectedEnvironemntName = "Development"; //set from dropdown selection
var predefinedConnections = ConfigurationManager.ConnectionStrings;
SqlConnectionStringBuilder connStringBuilder = null;
foreach( ConnectionStringSettings connString in predefinedConnections)
{
    if (connString.Name == selectedEnvironemntName )
    {
        connStringBuilder = new SqlConnectionStringBuilder(connString.ConnectionString);
    }
}
//the below two lines can be anywhere in your solution as long as you can pass the connStringBuilder to SqlConnection definition
SqlConnection connection = new SqlConnection();
connection.ConnectionString = connStringBuilder.ConnectionString;

当然,有一个依赖关系。必须确保根据配置文件中的连接字符串名称加载下拉列表值。具有此依赖项可确保在配置文件中添加新的 ConnectionString 将自动导致在 UI 的下拉列表中出现一个新条目