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

Imran Rizvi
la source

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;
Romil Kumar Jain
la source
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;
nawfal
la source
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);
Kishore Kumar
la source
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.
pvaju896
la source
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.

Habib
la source