【问题标题】:Get user and password from ConnectionStringSettings从 ConnectionStringSettings 获取用户和密码
【发布时间】:2011-12-15 13:23:53
【问题描述】:

如何使用 .NET 函数从 app.config 中的此类 connectionString 获取用户名和密码?

当然,我可以读取该字符串并获取 ID= 和 Password= 之后的值。

<connectionStrings>
<add name="MyConString" connectionString="Data Source=(local);Initial Catalog=MyDatabase;Persist Security Info=True;User ID=MyUsername Password=MyPassword;Connect  providerName="System.Data.SqlClient"/>    
</connectionStrings>

【问题讨论】:

  • 我希望您注意到您在“我的用户名”之后 - 在“密码”之前缺少一个 ';"

标签: c# connection-string app-config


【解决方案1】:

使用 ConnectionBuilderClass

SqlConnectionStringBuilder builder =  new SqlConnectionStringBuilder("Your connection string");
string password = builder.Password;


连同

string connString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString;

实现这一目标。

【讨论】:

    【解决方案2】:
    SqlConnectionStringBuilder con = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
    string myUser = con.UserID;
    string myPass = con.Password;
    

    【讨论】:

      【解决方案3】:

      如果您需要一种更通用的方法来解析连接字符串(一种不处理某个数据库提供者的细节的方法),您也可以使用

      System.Data.Common.DbConnectionStringBuilder

      它是 SqlConnectionStringBuilder 等其他类的基类。

      您可以创建一个 DbConnectionStringBuilder 实例,在我的情况下,我需要一个可配置的连接字符串,我可以从中获取信息——无论数据库提供程序类型如何。如果您需要这种灵活性,可以使用一些选项——您可以按照其他人的建议为您的提供者创建适当的 ConnectionStringBuilder ——这对于大多数需要提供者特定属性的情况可能是必需的。

      或者,如果您只想读取几个通用属性,例如,如果您只需要用户 ID 和密码,则可以使用 DbConnectionStringBuilder。

      此示例适用于任何包含用户 ID 和密码的连接字符串。

      DbConnectionStringBuilder db = new DbConnectionStringBuilder();
      db.ConnectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
      
      var username = db["User Id"].ToString();
      var password = db["Password"].ToString();
      

      【讨论】:

        【解决方案4】:
        var builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString)
        var user = builder.UserID;
        var password = builder.Password;
        

        【讨论】:

          【解决方案5】:

          可以从以下获取连接字符串

            SqlConnectionStringBuilder yourconn = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
          string password = yourconn.Password;
          

          然后你可以得到你正在寻找的子字符串。

          【讨论】:

            【解决方案6】:

            只是为 Tomas Walek 的回答添加一点内容。

            仅当连接字符串中的“用户 ID”大小写正确时,此方法才有效。 Oracle 提供商接受“用户 ID”OK,但 SqlConnectionStringBuilder 不起作用。

             public static class DbConnectionFactory
            {
                public static ConnectionStringSettings AppConnectionSettings = ConfigurationManager.ConnectionStrings["{A connection string name}"];
                public static SqlConnectionStringBuilder AppConnBuilder = new SqlConnectionStringBuilder(AppConnectionSettings.ConnectionString);
            
                public static string DbUserID
                {
                    get
                    {
                        return AppConnBuilder.UserID;
                    }
                    set { }
                }
            }
            

            【讨论】:

              【解决方案7】:

              添加对 System.Configuration 的引用,然后使用: 使用 System.Configuration;

              string MyDBConnection = ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString;
              SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(MyDBConnection);
              string UserID = builder.UserID;
              string Password = builder.Password;
              string ServerName = builder.DataSource;
              string DatabaseName = builder.InitialCatalog;
              

              【讨论】:

                【解决方案8】:
                 public static string GetConnectionSettings(string searchSetting ) 
                 { 
                     var con = ConfigurationManager.ConnectionStrings["yourConnectionHere"]‌​.ConnectionString; 
                     String[] myString = con.Split(';'); 
                     Dictionary<string, string> dict = new Dictionary<string, string>(); 
                
                     for (int i = 0; i < myString.Count(); i++) 
                     { 
                         String[] con3 = myString[i].Split('='); dict.Add(con3[0], con3[1]); 
                     } 
                
                    return dict[searchSetting]; 
                }
                

                对于搜索设置,您可以使用您想要的“用户身份”或密码。

                【讨论】:

                • 公共静态字符串 GetConnectionSettings(string searchSetting) { var con = ConfigurationManager.ConnectionStrings["yourConnectionHere"].ConnectionString; String[] myString = con.Split(';');字典 dict = new Dictionary(); for (int i = 0; i
                【解决方案9】:

                另一种方法是使用正则表达式(我做过),具有更宽容的模式,以处理可以在连接字符串上提供用户 ID 的不同方式:

                    public static string GetUserIdFromConnectionString(string connectionString)
                    {
                        return new Regex("USER\\s+ID\\=\\s*?(?<UserId>\\w+)",
                                RegexOptions.IgnoreCase)
                            .Match(connectionString)
                            .Groups["UserId"]
                            ?.Value;
                    }
                

                【讨论】:

                  【解决方案10】:
                  var connString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString;
                  var tokens = connString.Split(';');
                  
                  string userId;
                  string password;
                  
                  for(var i = 0;  i < tokens.Length; i++) {
                      var token = tokens[i];
                      if(token.StartsWith("User ID"))
                          userId = token.Substring(token.IndexOf("=") + 1);
                  
                      if(token.StartsWith("Password"))
                          password = token.Substring(token.IndexOf("=") + 1);
                  }
                  

                  【讨论】:

                  • +1 代码示例。但是,去掉“=”不应该是token.Substring(token.IndexOf("=") + 1);吗?
                  • @Tim:谢谢。注释和编辑 - 一个接一个地谈论总是抬起丑陋的头:)
                  【解决方案11】:
                  string connectionString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString;
                  var tokens = connectionString.Split(';').Select(n => n.Split('=');
                  string userId = tokens.First(n => n[0].Equals("User ID").Select(n => n[1]);
                  string password = tokens.First(n => n[0].Equals("Password").Select(n => n[1]);
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-01-05
                    相关资源
                    最近更新 更多