如何使用SqlConnectionStringBuilder从连接字符串获取数据库名称


87

我从不想使用字符串操作来拆分连接字符串并获取服务器,数据库,uid和密码。

我阅读了以下链接并阅读了接受的答案,我发现这是从连接字符串中获取用户名和密码的最佳方法,但是数据库名称呢?

从连接字符串获取用户名和密码的正确方法?

如何使用SqlConnectionStringBuilder从连接字符串获取数据库名称。(数据源是服务器名称吗?)

Answers:



146

您可以使用提供程序特定的ConnectionStringBuilder类(在适当的名称空间中),或System.Data.Common.DbConnectionStringBuilder根据需要抽象化连接字符串对象。您需要知道用于指定所需信息的特定于提供程序的关键字,但是对于SQL Server示例,您可以执行以下两项操作之一:

System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(connectionString);

string server = builder.DataSource;
string database = builder.InitialCatalog;

要么

System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();

builder.ConnectionString = connectionString;

string server = builder["Data Source"] as string;
string database = builder["Initial Catalog"] as string;

2
对我来说,最后一行必须是: string database = builder["Initial Catalog"] as string;-“数据库”是无效的关键字。
桑德拉

@Sandra是的,您正确的。如果我们使用SqlConnectionStringBuilder,则builder [“ Database”]作为字符串将起作用。
罗米尔·库马尔·贾因

30

一个更简单的替代方法是从连接对象本身获取信息。例如:

IDbConnection connection = new SqlConnection(connectionString);
var dbName = connection.Database;

同样,您也可以从连接对象获取服务器名称。

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;

这就是我想要的。谢谢。
伊凡·圣地亚哥

这是特定于的SqlConnection。有没有类似的方法可以制作这种跨RDBMS?
阿米特·乔希

@AmitJoshi他们都应该实施IDbConnection吗?
nawfal

@nawfal:我同意,但是仍然无法使用。我已经在这个问题中详细解释了这一点。stackoverflow.com/q/47727524/5779732
阿米特·乔希

它可以获取数据库和数据源,但无法以这种方式获取userId和密码。
Dush

11
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);

7

这为您提供了Xact;

System.Data.SqlClient.SqlConnectionStringBuilder connBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();

connBuilder.ConnectionString = connectionString;

string server = connBuilder.DataSource;           //-> this gives you the Server name.
string database = connBuilder.InitialCatalog;     //-> this gives you the Db name.


4

您可以使用InitialCatalog属性或也可以使用builder["Database"]。我用不同的情况进行了测试,但仍然可以使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.