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?)

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;

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;

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);

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.