我有一个连接字符串,我希望能够窥视例如“数据源”。 是否有解析器,或者我必须搜索字符串?


当前回答

你想要使用DbProviderFactory。CreateConnectionStringBuilder(),它为您提供特定于连接器的连接字符串构建器/解析器,但不要求您使用任何特定于连接器的类。

其他回答

这里有几行代码,可以将任何连接字符串解析到字典中:

Dictionary<string, string> connStringParts = connString.Split(';')
    .Select(t => t.Split(new char[] { '=' }, 2))
    .ToDictionary(t => t[0].Trim(), t => t[1].Trim(), StringComparer.InvariantCultureIgnoreCase);

然后你可以访问任何部分:

string dataSource = connStringParts["Data Source"];

你可以使用DbConnectionStringBuilder,你不需要任何特定的提供程序:

以下代码:

var cnstr = "Data Source=data source value;Server=ServerValue";
var builder = new DbConnectionStringBuilder();
builder.ConnectionString = cnstr;
Console.WriteLine("Data Source: {0}", builder["Data Source"]);
Console.WriteLine("Server: {0}", builder["Server"]);

输出到控制台:

Data Source: data source value
Server: ServerValue

编辑:

因为DbConnectionStringBuilder实现了dicictionary,你可以枚举连接字符串参数:

foreach (KeyValuePair<string, object> kv in builder)
{
    Console.WriteLine("{0}: {1}", kv.Key, kv.Value);
}

是的,有system。data。common。dbconnectionstringbuilder类。

DbConnectionStringBuilder类 类的基类 强类型的连接字符串 建筑商(SqlConnectionStringBuilder OleDbConnectionStringBuilder,等等 )获得。连接字符串 构建者让开发人员 以编程方式创建语法 正确连接字符串,并进行解析 并重建现有连接 字符串。

感兴趣的子类是:

System.Data.EntityClient.EntityConnectionStringBuilder
System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.OracleClient.OracleConnectionStringBuilder
System.Data.SqlClient.SqlConnectionStringBuilder

例如,要从SQL-server连接字符串中“窥视数据源”,你可以这样做:

var builder = new SqlConnectionStringBuilder(connectionString);
var dataSource = builder.DataSource;

使用SqlConnectionStringBuilder 不幸的是,由于连接字符串不同,您将不得不使用特定于DB的ConnectionStringBuilder。

我不太喜欢这里所有的答案。这就是我的发现。

使用。net Core

你可以直接使用内置的DbConnectionStringBuilder:

var builder = new System.Data.Common.DbConnectionStringBuilder();
builder.ConnectionString = "server=localhost;login=sa;pass=awesomeness";

var server = builder["server"];
var login = builder["login"];
var pass = builder["pass"];