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