我有一个连接字符串,我希望能够窥视例如“数据源”。 是否有解析器,或者我必须搜索字符串?
当前回答
你可以使用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);
}
其他回答
我不太喜欢这里所有的答案。这就是我的发现。
使用。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"];
是的,有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;
所以我发现所有现有的答案或多或少都是错误的。我最终得到了以下简单的解决方案:
class ConnectionStringParser: DbConnectionStringBuilder {
ConnectionStringParser(string c) { Connection = c; }
public override bool ShouldSerialize(string keyword) => true;
}
解析器在DbConnectionStringBuilder中,非常容易获取。我们必须做的唯一愚蠢的事情是将ShouldSerialize设置为总是返回true,以防止在尝试往返任意连接字符串时丢失组件。
你可以使用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);
}
使用SqlConnectionStringBuilder 不幸的是,由于连接字符串不同,您将不得不使用特定于DB的ConnectionStringBuilder。
推荐文章
- 防止在ASP中缓存。NET MVC中使用属性的特定操作
- 转换为值类型'Int32'失败,因为物化值为空
- c#中有任何连接字符串解析器吗?
- 在Linq中转换int到字符串到实体的问题
- 是否可以动态编译和执行c#代码片段?
- 创建自定义MSBuild任务时,如何从c#代码获取当前项目目录?
- MSBuild路径
- c#和Java的主要区别是什么?
- 在c#中创建一个特定时区的DateTime
- .NET中的属性是什么?
- csproj文件中的“Service Include”是干什么用的?
- 如何使用try catch进行异常处理是最佳实践
- 替换字符串中第一次出现的模式
- .NET中字节的字面后缀?
- 如何处理AccessViolationException