web-dev-qa-db-fra.com

Escape quote dans la chaîne de connexion web.config

J'ai une chaîne de connexion dans ma configuration Web:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass"Word" providerName="System.Data.SqlClient" />

Comme vous le voyez, il y a un signe de citation (") dans le mot de passe (fourni par un autre service. Je ne peux pas changer le mot de passe de cet utilisateur de base de données).

Comment dois-je échapper à la citation dans cette chaîne de connexion?

Btw: j'ai déjà essayé & quot; dans la ficelle. Cela n'a pas fonctionné - ado.net a alors reçu une exception ArgumenException: "Le format de la chaîne d'initialisation n'est pas conforme à la spécification commençant à l'index 57." est dans ma chaîne de connexion . J'ai également essayé d'inclure la partie mot de passe dans '- n'a pas fonctionné non plus.

Aussi essayé "" et\"- web.config ne peut pas être analysé alors.

Merci pour la solution:

Je devais combiner l'échappement de la double citation et mettre le mot de passe entre guillemets simples:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;Word'" providerName="System.Data.SqlClient" />
68

Utilisez &quot; au lieu de " pour l’échapper.

web.config est un fichier XML, vous devez donc utiliser l'échappement XML.

connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;Word"

Voir this fil de discussion.

Mettre à jour:

&quot; devrait fonctionner, mais comme ce n'est pas le cas, avez-vous essayé certaines des autres séquences d'échappement de chaîne pour .NET? \" et ""?

Mise à jour 2:

Essayez des guillemets simples pour la chaîne de connexion:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass"Word'

Ou:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass&quot;Word'

Mise à jour 3:

De MSDN (propriété SqlConnection.ConnectionString):

Pour inclure des valeurs contenant un point-virgule, un caractère guillemet simple ou un caractère guillemet double, la valeur doit être placée entre guillemets. Si la valeur contient à la fois un point-virgule et un caractère entre guillemets, vous pouvez la placer entre guillemets simples.

Alors:

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;Word'"

Le problème ne concerne pas web.config, mais le format de la chaîne de connexion. Dans une chaîne de connexion, si vous avez un " dans une valeur (de la paire clé-valeur), vous devez inclure la valeur dans '. Ainsi, alors que Password=somepass"Word ne fonctionne pas, Password='somepass"Word' le fait.

89
Oded
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;Word"

Étant donné que web.config est XML, vous devez échapper aux cinq caractères spéciaux:

&amp; -> &esperluette, U + 0026
&lt; -> <équerre gauche, signe inférieur à, U + 003C
&gt; -> >équerre, signe supérieur à, U + 003E
&quot; -> "guillemet, U + 0022
&apos; -> 'apostrophe, U + 0027 

+ n'est pas un problème, je suppose.

47
Emanuele Greco

si &quot; </ code> ne fonctionne pas, essayez plutôt &#34; </ code>.

3
Earl

Utilisez &quot; Cela devrait fonctionner.

1
spinon

Odeds répond que c'est presque terminé. Juste une chose à ajouter.

  1. Escape xml caractères spéciaux comme Emanuele Greco a dit.
  2. Mettez le mot de passe entre guillemets comme dit Oded
  3. (Celui-ci est nouveau) Échappe les ticks simples avec un autre tick ( ref )

ayant ce mot de passe = "'; ceci devrait être une chaîne de connexion valide:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'
0
Ritzelprimpf