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

Posted

技术标签:

【中文标题】如何使用 SqlConnectionStringBuilder 从连接字符串中获取数据库名称【英文标题】:How to get Database Name from Connection String using SqlConnectionStringBuilder 【发布时间】:2012-05-20 00:02:47 【问题描述】:

我不想使用字符串操作函数拆分连接字符串以获取服务器、数据库、用户名和密码。

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

Right way to get username and password from connection string?

。 (DataSource 是 Server 名称吗?)

【问题讨论】:

【参考方案1】:

如果需要,您可以使用特定于提供程序的 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;

【讨论】:

对我来说,最后一行必须是:string database = builder["Initial Catalog"] as string; - “数据库”是一个无效的关键字。 @Sandra 是的,你是对的。如果我们使用 SqlConnectionStringBuilder ,builder["Database"] as string 将起作用。【参考方案2】:

见MSDN documentation for InitialCatalog Property:

获取或设置与连接关联的数据库的名称...

此属性对应于连接字符串中的“初始目录”和“数据库”键...

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

这就是我要找的。谢谢。 这成为特定于SqlConnection 的。有没有类似的方法来制作这个跨 RDBMS? @AmitJoshi 他们不应该都实现IDbConnection吗? @nawfal:我同意,但这仍然不能使它可用。我已经在这个问题中详细解释了这一点。 ***.com/q/47727524/5779732 这样可以获取Database和DataSource,但是无法获取userId和密码。【参考方案4】:
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

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

【讨论】:

【参考方案5】:

这将为您提供 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.

【讨论】:

【参考方案6】:

数据库名称是SqlConnectionStringBuilder.InitialCatalog 属性的值。

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于如何使用 SqlConnectionStringBuilder 从连接字符串中获取数据库名称的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?