Як отримати ім'я бази даних із рядка підключення за допомогою SqlConnectionStringBuilder


88

Я ніколи не хочу розділяти рядок з'єднання за допомогою маніпуляції рядками і отримувати сервер, базу даних, 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;- "База даних" було недійсним ключовим словом.
Сандра

@Sandra так, ур правильно. builder ["База даних"] як рядок буде працювати, якщо ми використовуємо SqlConnectionStringBuilder.
Роміль Кумар Джайн

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
Amit Joshi

Він може отримати Database і DataSource, але не зміг отримати userId та пароль таким чином.
Душ,

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"]працює. Я протестував його в іншому корпусі, і він все ще працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.