我有一个应用程序(控制台),它正在从bin目录中读取连接字符串。
我们计划从命令行传递一个指向配置的目录路径。这样我们就可以通过更改“ConfigurationDirectory”的命令行参数来指向不同的DB之间切换
这要求我们动态加载连接字符串,我的连接字符串的格式如下:
<connectionStrings>
<add name="DB1" connectionString="Data Source=DB;Initial Catalog=someCatalog;Persist Security Info=True;User ID=****;Password=****; Asynchronous Processing=true" providerName="System.Data.SqlClient" />
<add name="DB2" connectionString="Data Source=DBName;Initial Catalog=someCatalog2;Persist Security Info=True;User ID=****;Password=****; Asynchronous Processing=true" providerName="System.Data.SqlClient" />
</connectionStrings>
我们没有配置标记。
要动态加载连接字符串,我试试这个:
var connectionStringconfigfile = "C:Somepath\connectionstring.config"
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = connectionStringconfigfile;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
我无法使用我当前的connectionstring文件,因为它抱怨没有配置标记。
问题是我的代码已经使用以下内容来初始化连接字符串:
ConfigurationManager.ConnectionStrings["DB1"].ConnectionString
使用这种新方法,上面的行似乎不起作用并且总是给我null,有没有办法让我不必更改现有代码?
答案 0 :(得分:0)
如果将外部配置文件包装在&lt; configuration&gt;中块,像这样:
<configuration><br>
<connectionStrings><br>
<add name="DB1" connectionString="Data Source=DB;Initial Catalog=someCatalog;Persist Security Info=True;User ID=****;Password=****; Asynchronous Processing=true" providerName="System.Data.SqlClient" /><br>
<add name="DB2" connectionString="Data Source=DBName;Initial Catalog=someCatalog2;Persist Security Info=True;User ID=****;Password=****; Asynchronous Processing=true" providerName="System.Data.SqlClient" /><br>
</connectionStrings><br>
</configuration>
您的代码应该有效。