Ani*_*Ani 293
是的,有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
Run Code Online (Sandbox Code Playgroud)
例如,要从SQL服务器连接字符串中"查看数据源",您可以执行以下操作:
var builder = new SqlConnectionStringBuilder(connectionString);
var dataSource = builder.DataSource;
Run Code Online (Sandbox Code Playgroud)
naw*_*fal 37
有来自不同供应商,如供应商特定的连接字符串的建设者SqlConnectionStringBuilder
,MySqlConnectionStringBuilder
,SQLiteConnectionStringBuilder
等(遗憾的是,从MS这次没有公共接口).否则你有DbProviderFactory.CreateConnectionStringBuilder,它将为你提供另一种方法来编写与提供者无关的方式.您需要在配置文件中指定provider并提供正确的dll版本.例如,
var c = "server=localhost;User Id=root;database=ppp";
var f = DbProviderFactories.GetFactory("MySql.Data.MySqlClient"); //your provider
var b = f.CreateConnectionStringBuilder();
b.ConnectionString = c;
var s = b["data source"];
var d = b["database"];
Run Code Online (Sandbox Code Playgroud)
我曾经为自己编写了手动解析,但没有给我任何麻烦.扩展它以提供其他参数的信息是微不足道的(现在它仅用于简单的事情,如数据库名称,数据源,用户名和密码).像这样左右:
static readonly string[] serverAliases = { "server", "host", "data source", "datasource", "address",
"addr", "network address" };
static readonly string[] databaseAliases = { "database", "initial catalog" };
static readonly string[] usernameAliases = { "user id", "uid", "username", "user name", "user" };
static readonly string[] passwordAliases = { "password", "pwd" };
public static string GetPassword(string connectionString)
{
return GetValue(connectionString, passwordAliases);
}
public static string GetUsername(string connectionString)
{
return GetValue(connectionString, usernameAliases);
}
public static string GetDatabaseName(string connectionString)
{
return GetValue(connectionString, databaseAliases);
}
public static string GetServerName(string connectionString)
{
return GetValue(connectionString, serverAliases);
}
static string GetValue(string connectionString, params string[] keyAliases)
{
var keyValuePairs = connectionString.Split(';')
.Where(kvp => kvp.Contains('='))
.Select(kvp => kvp.Split(new char[] { '=' }, 2))
.ToDictionary(kvp => kvp[0].Trim(),
kvp => kvp[1].Trim(),
StringComparer.InvariantCultureIgnoreCase);
foreach (var alias in keyAliases)
{
string value;
if (keyValuePairs.TryGetValue(alias, out value))
return value;
}
return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
为此,您在配置文件或任何dll中都不需要任何特殊功能.只有当你需要绕过格式不正确的连接字符串时,Contains
in Where
子句才是重要的,比如server = localhost;pp;
在pp
什么地方添加任何东西.要像普通的构建器一样(在这些情况下会爆炸),请更改Where
为
.Where(kvp => !string.IsNullOrWhitespace(kvp))
Run Code Online (Sandbox Code Playgroud)
And*_*rei 19
我不太喜欢这里的所有答案。这就是我发现的。
您可以直接使用内置的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"];
Run Code Online (Sandbox Code Playgroud)
cod*_*sam 13
这里有几行代码可以将任何连接字符串解析为字典:
Dictionary<string, string> connStringParts = connString.Split(';')
.Select(t => t.Split(new char[] { '=' }, 2))
.ToDictionary(t => t[0].Trim(), t => t[1].Trim(), StringComparer.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
然后你可以访问任何部分:
string dataSource = connStringParts["Data Source"];
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用 ConnectionStringBuilder 类来完成此操作。以下是标准数据提供程序的可用 DbConnectionStringBuilder 实现的列表:
System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.OracleClient.OracleConnectionStringBuilder
System.Data.SqlClient.SqlConnectionStringBuilder
Run Code Online (Sandbox Code Playgroud)
以下是解析连接字符串并显示其元素的示例。
string conString = @"Data Source=.\sqlexpress;" +
"Database=Northwind;Integrated Security=SSPI;" +
"Min Pool Size=5;Max Pool Size=15;Connection Reset=True;" +
"Connection Lifetime=600;";
// Parse the SQL Server connection string and display it's properties
SqlConnectionStringBuilder objSB1 = new SqlConnectionStringBuilder(conString);
Response.Write("<b>Parsed SQL Connection String Parameters:</b>");
Response.Write(" <br/> Database Source = " + objSB1.DataSource);
Response.Write(" <br/> Database = " + objSB1.InitialCatalog);
Response.Write(" <br/> Use Integrated Security = " + objSB1.IntegratedSecurity);
Response.Write(" <br/> Min Pool Size = " + objSB1.MinPoolSize);
Response.Write(" <br/> Max Pool Size = " + objSB1.MaxPoolSize);
Response.Write(" <br/> Lifetime = " + objSB1.LoadBalanceTimeout);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44333 次 |
最近记录: |