Jak uzyskać nazwę bazy danych z parametrów połączenia przy użyciu SqlConnectionStringBuilder

88

Nigdy nie chcę dzielić parametrów połączenia za pomocą manipulacji ciągami i uzyskać serwer, bazę danych, identyfikator UID i hasło.

Przeczytałem poniższy link i zaakceptowaną odpowiedź, stwierdziłem, że jest to najlepszy sposób na uzyskanie identyfikatora użytkownika i hasła z ciągu połączenia, ale co z nazwą bazy danych?

Właściwy sposób na uzyskanie nazwy użytkownika i hasła z parametrów połączenia?

Jak uzyskać nazwę bazy danych z parametrów połączenia przy użyciu SqlConnectionStringBuilder. (czy DataSource to nazwa serwera?)

Imran Rizvi
źródło

Odpowiedzi:

148

Możesz użyć klasy ConnectionStringBuilder specyficznej dla dostawcy (w odpowiedniej przestrzeni nazw) lub System.Data.Common.DbConnectionStringBuilderw razie potrzeby wyodrębnić obiekt parametrów połączenia. Musisz znać słowa kluczowe specyficzne dla dostawcy, które służą do oznaczania informacji, których szukasz, ale na przykładzie SQL Server możesz zrobić jedną z tych dwóch rzeczy:

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

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

lub

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;
Romil Kumar Jain
źródło
2
Dla mnie ostatnia linia musiała brzmieć: string database = builder["Initial Catalog"] as string;- "Baza danych" to nieprawidłowe słowo kluczowe.
Sandra,
@Sandra tak, ur poprawne. builder ["Database"] jako string zadziała, jeśli użyjemy SqlConnectionStringBuilder.
Romil Kumar Jain
32

O wiele prostszą alternatywą jest pobranie informacji z samego obiektu połączenia. Na przykład:

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

Podobnie możesz również uzyskać nazwę serwera z obiektu połączenia.

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;
nawfal
źródło
To jest to, czego szukałem. Dzięki.
Ivan Santiago,
To staje się specyficzne dla SqlConnection. Czy jest jakiś podobny sposób, aby ten krzyżowy RDBMS?
Amit Joshi
@AmitJoshi Czy wszyscy powinni wdrażać IDbConnection?
nawfal
@nawfal: Zgadzam się, ale to nadal nie czyni go użytecznym. Wyjaśniłem to szczegółowo w tym pytaniu. stackoverflow.com/q/47727524/5779732
Amit Joshi,
Może uzyskać bazę danych i źródło danych, ale nie może w ten sposób uzyskać identyfikatora użytkownika i hasła.
Dush
11
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);
Kishore Kumar
źródło
7

to daje 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
źródło
4

Możesz użyć właściwości InitialCatalog lub również builder["Database"]działa. Przetestowałem to z inną obudową i nadal działa.

Habib
źródło