J'ai une chaîne de connexion et je veux pouvoir voir par exemple "Source de données". Existe-t-il un analyseur ou dois-je rechercher la chaîne?
181
Oui, il y a la System.Data.Common.DbConnectionStringBuilder
classe.
La classe DbConnectionStringBuilder fournit la classe de base à partir de laquelle dérivent les générateurs de chaînes de connexion fortement typées (SqlConnectionStringBuilder, OleDbConnectionStringBuilder, etc.). Les générateurs de chaînes de connexion permettent aux développeurs de créer par programme des chaînes de connexion syntaxiquement correctes, et d'analyser et de reconstruire les chaînes de connexion existantes.
Les sous-classes d'intérêt sont:
System.Data.EntityClient.EntityConnectionStringBuilder
System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.OracleClient.OracleConnectionStringBuilder
System.Data.SqlClient.SqlConnectionStringBuilder
Par exemple, pour "jeter un œil à la source de données" à partir d'une chaîne de connexion SQL-server, vous pouvez faire:
var builder = new SqlConnectionStringBuilder(connectionString);
var dataSource = builder.DataSource;
DbConnectionStringBuilder
a des fonctionnalités de traitement génériques qui peuvent être utilisées sans utiliser de sous-classes:if (builder.TryGetValue("Password", out var pwd)) { string decrypted = SomehowDecrypt(pwd); builder["Password"] = decrypted; }
Il y a des constructeurs de chaîne de connexion spécifique des fournisseurs de divers fournisseurs tels que
SqlConnectionStringBuilder
,MySqlConnectionStringBuilder
,SQLiteConnectionStringBuilder
etc (malheureusement il n'y a pas d' interface publique de MS cette fois -ci ). Sinon, vous avez DbProviderFactory.CreateConnectionStringBuilder qui vous donnera une autre façon de l'écrire de manière indépendante du fournisseur. Vous devrez spécifier le fournisseur dans le fichier de configuration et disposer de la bonne version de la dll. Par exemple.,J'avais une fois écrit une analyse manuelle pour moi-même, ce qui ne me posait aucun problème. Il serait trivial d'étendre cela pour donner des informations sur d'autres paramètres (pour le moment, ce n'est que pour des choses simples comme le nom de la base de données, la source de données, le nom d'utilisateur et le mot de passe). Comme ceci ou deux:
Pour cela, vous n'avez besoin de rien de spécial dans le fichier de configuration, ni d'aucune dll.
Contains
LaWhere
clause in n'est importante que si vous avez besoin de contourner les chaînes de connexion mal formatées commeserver = localhost;pp;
oùpp
n'ajoute rien. Pour se comporter comme les constructeurs normaux (qui exploserait dans ces cas) changerWhere
àla source
StringComparer.InvariantCultureIgnoreCase
. Voir laToDictionary
surcharge';'
ou un'='
dans son mot de passe. J'avais écrit une implémentation similaire et appris qu'elle ne fonctionnait pas à la dure. Gosh, l'analyse des chaînes de connexion est en fait beaucoup plus difficile que je ne le pensais!Voici quelques lignes de code qui analysent n'importe quelle chaîne de connexion dans un dictionnaire:
Et puis vous pouvez accéder à n'importe quelle partie:
la source
StringSplitOptions.RemoveEmptyEntries
la première division, car cela causera uneIndexOutOfRange
exception s'il y a un suivi;
SqlConnection
avec leSqlConnectionStringBuilder
.Utilisez le SqlConnectionStringBuilder Malheureusement, vous devrez utiliser un ConnectionStringBuilder spécifique à la base de données car les chaînes de connexion diffèrent.
la source
Vous souhaitez utiliser DbProviderFactory.CreateConnectionStringBuilder () qui vous fournit un générateur / analyseur de chaîne de connexion spécifique à votre connecteur, mais ne vous oblige pas à utiliser des classes spécifiques au connecteur.
la source
Oui, vous pouvez le faire à l'aide des classes ConnectionStringBuilder. Voici la liste des implémentations DbConnectionStringBuilder disponibles pour les fournisseurs de données standard:
Voici un exemple d'exemple d'analyse de la chaîne de connexion et d'afficher ses éléments.
la source
Vous pouvez utiliser DbConnectionStringBuilder et vous n'avez besoin d'aucun fournisseur spécifique:
Le code suivant:
Sorties vers la console:
ÉDITER:
Puisque DbConnectionStringBuilder implémente IDictionary, vous pouvez énumérer les paramètres de la chaîne de connexion:
la source
Je n'ai pas vraiment aimé toutes les réponses ici. Voici donc ce que j'ai trouvé.
Avec .NET Core
Vous pouvez utiliser
DbConnectionStringBuilder
directement:la source
J'ai donc trouvé que toutes les réponses existantes étaient plus ou moins fausses. J'ai fini avec la solution triviale suivante:
L'analyseur est dans DbConnectionStringBuilder et assez facile d'accès. La seule chose idiote que nous devons faire est de définir ShouldSerialize pour toujours retourner true pour éviter de perdre des composants lorsque vous essayez d'aller-retour des chaînes de connexion arbitraires.
la source