Comment obtenir le nom de la base de données à partir de la chaîne de connexion à l'aide de SqlConnectionStringBuilder


87

Je ne veux jamais diviser la chaîne de connexion en utilisant la manipulation de chaîne et obtenir le serveur, la base de données, l'uid et le mot de passe.

J'ai lu le lien suivant et lu la réponse acceptée, j'ai trouvé que c'était le meilleur moyen d'obtenir l'identifiant et le mot de passe de la chaîne de connexion, mais qu'en est-il du nom de la base de données?

La bonne façon d'obtenir le nom d'utilisateur et le mot de passe de la chaîne de connexion?

Comment obtenir le nom de la base de données à partir de la chaîne de connexion à l'aide de SqlConnectionStringBuilder. (le DataSource est-il le nom du serveur?)

Réponses:



147

Vous pouvez utiliser la classe ConnectionStringBuilder spécifique au fournisseur (dans l'espace de noms approprié) ou System.Data.Common.DbConnectionStringBuilderpour abstraire l'objet de chaîne de connexion si vous en avez besoin. Vous devez connaître les mots clés spécifiques au fournisseur utilisés pour désigner les informations que vous recherchez, mais pour un exemple SQL Server, vous pouvez faire l'une de ces deux choses:

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

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

ou

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
Pour moi, la dernière ligne devait être: string database = builder["Initial Catalog"] as string;- "Base de données" était un mot clé invalide.
Sandra

@Sandra oui tu as raison. builder ["Database"] en tant que chaîne fonctionnera si nous utilisons SqlConnectionStringBuilder.
Romil Kumar Jain le

30

Une alternative beaucoup plus simple consiste à obtenir les informations de l'objet de connexion lui-même. Par exemple:

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

De même, vous pouvez également obtenir le nom du serveur à partir de l'objet de connexion.

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

C'est ce que je cherchais. Merci.
Ivan Santiago du

Cela devient spécifique pour SqlConnection. Existe-t-il un moyen similaire de faire ce SGBDR croisé?
Amit Joshi

@AmitJoshi Ne devraient-ils pas tous mettre en œuvre IDbConnection?
nawfal

@nawfal: Je suis d'accord mais cela ne le rend toujours pas utilisable. J'ai expliqué cela en détail dans cette question. stackoverflow.com/q/47727524/5779732
Amit Joshi

Il peut obtenir la base de données et la source de données, mais n'a pas pu obtenir l'ID utilisateur et le mot de passe de cette manière.
Dush

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

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

7

cela vous donne le 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

Vous pouvez utiliser la propriété InitialCatalog ou builder["Database"]fonctionne également. Je l'ai testé avec un boîtier différent et cela fonctionne toujours.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.