从ConnectionStringSettings获取用户名和密码

如何使用.NET函数从app.config中的这样一个connectionString获取用户和密码?

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

   

使用ConnectionBuilderClass

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

与…一起

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

为达到这个。

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

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

System.Data.Common.DbConnectionStringBuilder

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

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

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

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

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

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

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

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

只是为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 { } } } 

添加对System.Configuration的引用,然后使用:using 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; 
  public static string GetConnectionSettings(string searchSetting ) { var con = ConfigurationManager.ConnectionStrings["yourConnectionHere"]‌​.ConnectionString; String[] myString = con.Split(';'); Dictionary dict = new Dictionary(); for (int i = 0; i < myString.Count(); i++) { String[] con3 = myString[i].Split('='); dict.Add(con3[0], con3[1]); } return dict[searchSetting]; } 

对于searchSetting,您可以使用您想要的“用户是”或密码。

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

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