Come ottenere il nome del database dalla stringa di connessione utilizzando SqlConnectionStringBuilder


92

Non voglio mai dividere la stringa di connessione usando la manipolazione delle stringhe e ottenere server, database, uid e password.

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

Modo giusto per ottenere nome utente e password dalla stringa di connessione?

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

Risposte:



152

È possibile utilizzare la classe ConnectionStringBuilder specifica del provider (all'interno dello spazio dei nomi appropriato) o System.Data.Common.DbConnectionStringBuilderastrarre l'oggetto stringa di connessione, se necessario. Avresti bisogno di conoscere le parole chiave specifiche del provider utilizzate per designare le informazioni che stai cercando, ma per un esempio di SQL Server potresti 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;

2
Per me, l'ultima riga doveva essere: string database = builder["Initial Catalog"] as string;- "Database" era una parola chiave non valida.
Sandra

@Sandra, sì, hai ragione. builder ["Database"] come stringa funzionerà se usiamo SqlConnectionStringBuilder.
Romil Kumar Jain

32

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

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

Allo stesso modo è possibile ottenere anche il nome del server dall'oggetto connessione.

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

Questo è quello che stavo cercando. Grazie.
Ivan Santiago

Questo diventa specifico per SqlConnection. Esiste un modo simile per rendere questo RDBMS incrociato?
Amit Joshi

@AmitJoshi Non dovrebbero implementarli tutti IDbConnection?
nawfal

@nawfal: sono d'accordo ma questo non lo rende ancora utilizzabile. L'ho spiegato in dettaglio in questa domanda. stackoverflow.com/q/47727524/5779732
Amit Joshi

Può ottenere Database e DataSource, ma non può ottenere userId e password in questo modo.
Dush

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

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

7

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

Puoi usare InitialCatalog Property o builder["Database"]funziona pure. L'ho provato con un case diverso e funziona ancora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.