So erhalten Sie den Datenbanknamen mithilfe von SqlConnectionStringBuilder aus der Verbindungszeichenfolge

87

Ich möchte niemals Verbindungszeichenfolgen mithilfe von Zeichenfolgenmanipulationen aufteilen und Server, Datenbank, UID und Kennwort abrufen.

Ich habe den folgenden Link gelesen und die akzeptierte Antwort gelesen. Ich habe festgestellt, dass dies der beste Weg ist, um Benutzer-ID und Kennwort aus der Verbindungszeichenfolge herauszuholen. Aber was ist mit dem Datenbanknamen?

Richtiger Weg, um Benutzername und Passwort von der Verbindungszeichenfolge zu erhalten?

So erhalten Sie den Datenbanknamen mithilfe von SqlConnectionStringBuilder aus der Verbindungszeichenfolge. (Ist die DataSource der Servername?)

Imran Rizvi
quelle

Antworten:

146

Sie können die anbieterspezifische ConnectionStringBuilder-Klasse (innerhalb des entsprechenden Namespace) verwenden oder System.Data.Common.DbConnectionStringBuilderdas Verbindungszeichenfolgenobjekt bei Bedarf abstrahieren. Sie müssen die anbieterspezifischen Schlüsselwörter kennen, mit denen die gesuchten Informationen angegeben werden. In einem SQL Server-Beispiel können Sie jedoch eine der beiden folgenden Aktionen ausführen:

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

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

oder

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
quelle
2
Für mich musste die letzte Zeile lauten: string database = builder["Initial Catalog"] as string;- "Datenbank" war ein ungültiges Schlüsselwort.
Sandra
@ Sandra ja ur richtig. Builder ["Datenbank"] als Zeichenfolge funktioniert, wenn wir SqlConnectionStringBuilder verwenden.
Romil Kumar Jain
30

Eine viel einfachere Alternative besteht darin, die Informationen vom Verbindungsobjekt selbst abzurufen. Beispielsweise:

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

Ebenso können Sie den Servernamen auch vom Verbindungsobjekt abrufen.

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;
nawfal
quelle
Das habe ich gesucht. Vielen Dank.
Ivan Santiago
Dies wird spezifisch für SqlConnection. Gibt es einen ähnlichen Ausweg, um dieses Cross-RDBMS zu erstellen?
Amit Joshi
@AmitJoshi Sollten sie nicht alle implementieren IDbConnection?
Nawfal
@nawfal: Ich stimme zu, aber das macht es immer noch nicht nutzbar. Ich habe dies in dieser Frage ausführlich erklärt. stackoverflow.com/q/47727524/5779732
Amit Joshi
Es kann die Datenbank und die DataSource abrufen, aber die Benutzer-ID und das Kennwort auf diese Weise nicht abrufen.
Dush
11
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);
Kishore Kumar
quelle
7

das gibt dir den 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
quelle
4

Sie können die InitialCatalog- Eigenschaft verwenden oder builder["Database"]funktionieren auch. Ich habe es mit einem anderen Fall getestet und es funktioniert immer noch.

Habib
quelle