从ConnectionStringSettings获取用户名和密码

23

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

1
我希望你注意到在“用户名”之后、“密码”之前缺少一个“;”。 - John Gathogo
12个回答

37

使用 ConnectionBuilder 类

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


连同

string connString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString;
为了实现这个目标。

5
如果您需要一种更通用的解析连接字符串的方法(不涉及特定的数据库提供程序),您也可以使用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
SqlConnectionStringBuilder con = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
string myUser = con.UserID;
string myPass = con.Password;

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

1

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

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

你可以得到你正在查找的子字符串。

0

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

0

另一种方法是使用正则表达式(我已经这样做了),采用更宽容的模式来处理连接字符串中可能提供用户ID的不同方式:

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

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

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


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

0

从 DbConnection 中获取“用户 Id”的扩展方法:

using System;
using System.Data.Common;
using System.Text.RegularExpressions;

namespace DemoProject.Helpers
{
    public static class DbConnectionExtensions
    {
        public static string GetUserId(this DbConnection connection)
        {
            const string userIdPattern1 = "User[ ]*Id";
            const string userIdPattern2 = "UID";

            var connectionString = connection.ConnectionString;
            foreach (var item in connectionString.Split(';'))
            {
                var index = item.IndexOf('=');
                if (index == -1)
                    continue;

                var property = item.Substring(0, index).Trim();
                if (Regex.IsMatch(property, userIdPattern1, RegexOptions.IgnoreCase) ||
                    Regex.IsMatch(property, userIdPattern2, RegexOptions.IgnoreCase))
                {
                    var userId = item.Substring(index + 1).Trim();
                    return userId;
                }
            }

            throw new Exception("Couldn't find \"User Id\" in connectionString");
        }
    }
}

使用示例 #1:

using DemoProject.Helpers;
using Oracle.ManagedDataAccess.Client;

namespace DemoProject
{
    class Program
    {
        static void Main(string[] args)
        {
            const string connectionString = "Data Source=(DESCRIPTION=" +
                                                "(ADDRESS=(PROTOCOL=TCP)(HOST=oracle19c-vm)(PORT=1521))" +
                                                "(CONNECT_DATA=(SERVICE_NAME=ORCLPDB1)));" +
                                            "User Id=JOHN;" +
                                            "Password=pwd123";

            var connection = new OracleConnection(connectionString);
            var userId = connection.GetUserId();
        }
    }
}

使用示例#2:

using DemoProject.Helpers;
using Npgsql;

namespace DemoProject
{
    class Program
    {
        static void Main(string[] args)
        {
            const string connectionString = "Server=postgre-vm;" +
                                            "User Id=JOHN;" +
                                            "Password=pwd123;" +
                                            "Database=DEV1";

            var connection = new NpgsqlConnection(connectionString);
            var userId = connection.GetUserId();
        }
    }
}

另外,您可以添加第二个扩展方法来获取密码


0
只是想在Tomas Walek的回答中补充一点。
如果连接字符串中的“User ID”正确大写,这种方法才有效。Oracle提供程序可以接受“User 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 { }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接