2012-05-11 11 views
67

Non voglio mai dividere la stringa di connessione utilizzando la manipolazione delle stringhe e ottenere server, database, uid e password.Come ottenere il nome del database dalla stringa di connessione utilizzando SqlConnectionStringBuilder

Ho letto il seguente link e letto la risposta accettata, ho trovato che è il modo migliore per ottenere userid e password dalla stringa di connessione, ma per quanto riguarda il nome del database?

Right way to get username and password from connection string?

Come ottenere il nome del database da stringa di connessione utilizzando SqlConnectionStringBuilder. (Fa il DataSource è il nome del server?)

risposta

3

È possibile utilizzare la proprietà InitialCatalog o builder["Database"]. L'ho provato con un caso diverso e funziona ancora.

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString); 

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

È possibile utilizzare la classe ConnectionStringBuilder specifico del provider (nello spazio dei nomi appropriato), o System.Data.Common.DbConnectionStringBuilder di astrarre l'oggetto stringa di connessione se è necessario. Avresti bisogno di conoscere le parole chiave specifiche del provider utilizzati per designare le informazioni che stai cercando, ma per un esempio di SQL Server che si possa fare una di queste due cose:

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

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

o

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

Per me, l'ultima riga doveva essere: 'string database = builder [" Catalogo iniziale "] come stringa;' - "Database" era una parola chiave non valida. – Sandra

+0

@Sandra si è corretto. builder ["Database"] come stringa funzionerà se usiamo SqlConnectionStringBuilder. –

4

questo ti dà 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

Un'alternativa molto più semplice è ottenere le informazioni dall'oggetto di connessione stesso. Ad esempio:

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

Analogamente è possibile ottenere il nome del server dall'oggetto di connessione.

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

Questo è quello che stavo cercando. Grazie. –

+0

Diventa specifico per 'SqlConnection'. Esiste un modo simile per realizzare questo cross RDBMS? –

+0

@AmitJoshi Non dovrebbero tutti implementare 'IDbConnection'? – nawfal

Problemi correlati