Как получить имя базы данных из строки подключения с помощью SqlConnectionStringBuilder

89

Я никогда не хочу разбивать строку подключения, используя манипуляции со строкой, и получать сервер, базу данных, uid и пароль.

Я прочитал следующую ссылку и прочитал принятый ответ, я обнаружил, что это лучший способ получить идентификатор пользователя и пароль из строки подключения, но как насчет имени базы данных?

Правильный способ получить имя пользователя и пароль из строки подключения?

Как получить имя базы данных из строки подключения с помощью SqlConnectionStringBuilder. (DataSource - это имя сервера?)

Имран Ризви
источник

Ответы:

148

Вы можете использовать зависящий от поставщика класс 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;- «База данных» было недопустимым ключевым словом.
Сандра
@ Сандра, да, ты прав. builder ["Database"] как строка будет работать, если мы будем использовать SqlConnectionStringBuilder.
Romil Kumar Jain
32

Гораздо более простой альтернативой является получение информации из самого объекта подключения. Например:

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

Точно так же вы можете получить имя сервера из объекта подключения.

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;
науфал
источник
Это то, что я искал. Спасибо.
Иван Сантьяго
Это становится специфическим для SqlConnection. Есть ли аналогичный выход для создания этой перекрестной СУБД?
Амит Джоши
@AmitJoshi Разве они не должны реализовывать все IDbConnection?
nawfal
@nawfal: Я согласен, но это все еще не делает его пригодным для использования. Я подробно объяснил это в этом вопросе. stackoverflow.com/q/47727524/5779732
Амит Джоши
Он может получить базу данных и источник данных, но не может получить таким образом идентификатор пользователя и пароль.
Dush
12
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.
pvaju896
источник
4

Вы можете использовать свойство InitialCatalog или также builder["Database"]работает. Я тестировал его с другим корпусом, и он все еще работает.

Хабиб
источник