2012-05-11 3 views
67

Nigdy nie chcę podzielić ciąg połączenia za pomocą manipulacji ciągami i uzyskać serwer, bazę danych, identyfikator użytkownika i hasło.Jak uzyskać nazwę bazy danych z ciągu połączenia za pomocą SqlConnectionStringBuilder

Przeczytałem poniższy link i przeczytałem 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?

Right way to get username and password from connection string?

Jak uzyskać nazwę bazy danych z ciąg połączenia przy użyciu SqlConnectionStringBuilder. (Czy DataSource jest nazwą serwera?)

Odpowiedz

3

Można również użyć usługi InitialCatalog Właściwość lub builder["Database"]. Testowałem to z innym przypadkiem i nadal działa.

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString); 

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

Można użyć klasy ConnectionStringBuilder dostawcy specyficzne (w ramach odpowiedniej przestrzeni nazw) lub System.Data.Common.DbConnectionStringBuilder do abstrakcyjnego obiektu ciąg połączenia, jeśli trzeba. trzeba by znać słowa kluczowe specyficzną używane do wyznaczenia informacji, której szukasz, ale na przykład SQL Server można zrobić żadnej 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; 
+1

Dla mnie ostatnia linia musiała być: 'string database = builder [" Initial Catalog "] jako ciąg;' - "Baza danych" była nieprawidłowym słowem kluczowym. – Sandra

+0

@Sandra yes ur correct. builder ["Baza danych"] jako łańcuch będzie działał, jeśli użyjemy SqlConnectionStringBuilder. –

4

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. 
20

Znacznie prostszą alternatywą jest uzyskanie informacji z samego obiektu połączenia. Na przykład:

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

Podobnie można uzyskać nazwę serwera od obiektu połączenia.

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

Tego właśnie szukałem. Dzięki. –

+0

To staje się specyficzne dla 'SqlConnection'. Czy istnieje podobny sposób, aby ten krzyż RDBMS? –

+0

@AmitJoshi Czy nie wszystkie one wdrażają 'IDbConnection'? – nawfal

Powiązane problemy