从ConnectionStringSettings获取用户名和密码

时间:2011-10-26 08:14:45

标签: c# connection-string app-config

如何使用.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>

11 个答案:

答案 0 :(得分:32)

使用ConnectionBuilderClass

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


连同

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

实现这一目标。

答案 1 :(得分:4)

SqlConnectionStringBuilder con = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
string myUser = con.UserID;
string myPass = con.Password;

答案 2 :(得分:2)

var builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString)
var user = builder.UserID;
var password = builder.Password;

答案 3 :(得分:2)

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

System.Data.Common.DbConnectionStringBuilder

这是其他类的基类,如SqlConnectionStringBuilder等。

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

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

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

DbConnectionStringBuilder db = new DbConnectionStringBuilder();
db.ConnectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;

var username = db["User Id"].ToString();
var password = db["Password"].ToString();

答案 4 :(得分:1)

您可以从以下

获取连接字符串
  SqlConnectionStringBuilder yourconn = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
string password = yourconn.Password;

然后,您可以获取您要查找的子字符串。

答案 5 :(得分:0)

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

只有在连接字符串中的“用户ID”正确大写时,此方法才有效。 Oracle提供商接受“用户ID”确定,但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 { }
    }
}

答案 6 :(得分:0)

添加对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;

答案 7 :(得分:0)

 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]; 
}

对于searchSetting,你可以使用你想要的东西&#34; User Is&#34;或密码。

答案 8 :(得分:0)

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

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

答案 9 :(得分:-2)

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);
}

答案 10 :(得分:-2)

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]);