C# 从ConnectionString设置获取用户和密码

C# 从ConnectionString设置获取用户和密码,c#,connection-string,app-config,C#,Connection String,App Config,如何使用.NET函数从app.config中的此类连接字符串获取用户和密码 当然,我可以读取该字符串并获得ID=和Password=之后的值 <connectionStrings> <add name="MyConString" connectionString="Data Source=(local);Initial Catalog=MyDatabase;Persist Security Info=True;User ID=MyUsername Password=MyPass

如何使用.NET函数从app.config中的此类连接字符串获取用户和密码

当然,我可以读取该字符串并获得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>

var connString=ConfigurationManager.ConnectionString[“MyConString”].ConnectionString;
var tokens=connString.Split(“;”);
字符串用户标识;
字符串密码;
for(var i=0;i
您可以从以下位置获取连接字符串

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

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

使用ConnectionBuilderClass

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

连同

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

要做到这一点。

只需给托马斯·瓦莱克的答案增加一点

var builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString)
var user = builder.UserID;
var password = builder.Password;
只有当连接字符串中的“用户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的引用,然后使用: 使用系统配置

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静态字符串GetConnectionSettings(字符串搜索设置)
{ 
var con=ConfigurationManager.ConnectionString[“yourConnectionHere”]‌​.连接字符串;
字符串[]myString=con.Split(“;”);
Dictionary dict=新字典();
对于(int i=0;i

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

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

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

var username = db["User Id"].ToString();
var password = db["Password"].ToString();
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();

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

    public static string GetUserIdFromConnectionString(string connectionString)
    {
        return new Regex("USER\\s+ID\\=\\s*?(?<UserId>\\w+)",
                RegexOptions.IgnoreCase)
            .Match(connectionString)
            .Groups["UserId"]
            ?.Value;
    }
公共静态字符串GetUserIdFromConnectionString(字符串connectionString)
{
返回新的正则表达式(“用户\\s+ID\\=\\s*?(?\\w+)”,
RegexOptions.IgnoreCase)
.Match(连接字符串)
.Groups[“UserId”]
价值
}

+1用于代码示例。但是,它不应该是
token.Substring(token.IndexOf(“=”)+1)去掉“=”?@Tim:谢谢。记录和编辑——一个总是抬起丑陋的头的人在谈论“关”时说:)我希望你注意到你错过了一个';在“MyUsername”之后-在“Password”之前公共静态字符串GetConnectionSettings(字符串搜索设置){var con=ConfigurationManager.ConnectionString[“yourConnectionHere”].ConnectionString;string[]myString=con.Split(';');Dictionary dict=new Dictionary();for(int i=0;i 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]; 
}
DbConnectionStringBuilder db = new DbConnectionStringBuilder();
db.ConnectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;

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