如何获取app.config中所有连接字符串的列表

3

我需要创建一个小型控制台应用程序,它需要接收两个参数:

  1. app.config 文件的位置。
  2. 密码。

我的问题是控制台应用程序需要读取 connectionStrings 并对其进行加密,然后将加密文本保存到配置文件中。我已经搜索了很多,但没有找到解决方案。

我的 app.config 文件可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
     <connectionStrings>
        <add name="Conn1" connectionString="Data Source=Database1;Initial Catalog=DB12;User ID=User1234;Password=Qwerty123" providerName="System.Data.SqlClient" />
        <add name="Conn2" connectionString="Data Source=Database2;Initial Catalog=DB12;User ID=User1234;Password=Qwerty123" providerName="System.Data.SqlClient" />
       </connectionStrings>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      </startup>
</configuration>

我已经完成了加密部分。在这个例子中,我只需要读取这两个connectionstrings并将它们各自加密。请注意,每次connectStrings的名称都不同,因为控制台应用程序是由TFS构建服务器触发的。


你尝试过在应用程序配置中加密字符串吗?谷歌上有很多相关的帖子。 - undefined
请看这个链接:https://www.codeproject.com/Tips/598863/EncryptionplusDecryptionplusConnectionplusStringpl - undefined
1
为什么必须更改名称?我猜如果必须更改,那么你真正想问的是:“如何获取app.config中所有连接字符串的列表?” - undefined
@DonBoitnott,名称更改的原因是因为控制台被用于许多不同的系统,因此名称也会随之改变。 - undefined
显示剩余2条评论
4个回答

5

基本上,你不需要连接字符串的名称,只需要连接本身。我相信你只需要使用foreach循环遍历它们,对于每个迭代,你可以获取app.config中最后一个connectionString。

 foreach (System.Configuration.ConnectionStringSettings css in System.Configuration.ConfigurationManager.ConnectionStrings)
 {
   string connectionString = css.ConnectionString;  
   // encryption part
   // rewriting the connectionString in the app.config or however you want ot be done 
 }

你提到你已经完成了加密部分,现在只需要读取字符串。

希望这能帮到你!


1
如果您不知道连接字符串的名称,可以尝试以下方法:
ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;

if (connections.Count != 0)
{
    //go trough all available ConnectionStrings in app.config
    foreach (ConnectionStringSettings connection in connections)
    {
       //reading the ConnectionString
       string conString = ConfigurationManager.ConnectionStrings[connection.Name].ConnectionString;

       //writing the ConnectionString
       Configuration config =  ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
       config.ConnectionStrings.ConnectionStrings[connection.Name].ConnectionString = EncryptConfig(conString); //just call your Encryption part here instead of "EncryptConfig()" 
       config.Save(ConfigurationSaveMode.Modified, true);
       ConfigurationManager.RefreshSection("connectionStrings");
    }
}

0
使用ConfigurationManager类,就像这样
ConfigurationManager.ConnectionStrings["Conn2"].ConnectionString

我尝试过使用那个,但是由于连接字符串的名称根据配置来自哪个系统而变化。 - undefined

0

我想出了这个方法,可以同时适用于应用程序和网页。请注意,我还需要更改这些值并将它们保存到磁盘上,所以不能简单地循环遍历。

var appConfig = System.Web.HttpContext.Current == null
                ? ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                : System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");

var needsToSave = false;
foreach (var appCon in appConfig.ConnectionStrings.ConnectionStrings.Cast<ConnectionStringSettings>())
{
    //do stuff
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接