92 votes

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 guillemet ( " ) dans le mot de passe (donné par un autre département. Je ne peux pas changer le mot de passe de cet utilisateur de la base de données).

Comment dois-je échapper les guillemets dans cette chaîne de connexion ?

Btw : J'ai déjà essayé & quot ; dans la chaîne. Cela n'a pas fonctionné - ado.net a obtenu une ArgumenException alors : "Le format de la chaîne d'initialisation n'est pas conforme aux spécifications à partir de l'index 57." 57 est l'endroit où se trouve le & quot ; dans ma chaîne de connexion. J'ai également essayé d'entourer la partie mot de passe de ' - cela n'a pas fonctionné non plus.

J'ai également essayé "" et "" - le web.config ne peut pas être analysé dans ce cas.

Merci pour la solution :

J'ai dû combiner l'échappement du guillemet double et la mise du mot de passe entre guillemets simples :

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

112voto

Oded Points 271275

Utilisez &quot; au lieu de " pour y é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 ce fil du forum.

Mise à jour :

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

Mise à jour 2 :

Essayez les guillemets simples pour le connectionString :

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 qui contiennent un point-virgule, un caractère guillemet simple ou un caractère guillemet double, la valeur doit être placée entre guillemets doubles. Si la valeur contient à la fois un point-virgule et un caractère entre guillemets, elle peut être placée entre guillemets simples.

Donc :

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

Le problème ne vient pas de web.config, mais du 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 entourer la valeur dans ' . Ainsi, alors que Password=somepass"word ne fonctionne pas, Password='somepass"word' fait.

0 votes

Cela ne fonctionne pas. De toute évidence, cela fonctionnerait si c'était dans du xml ordinaire, mais pas dans une valeur d'attribut.

0 votes

Sebastian P.R. Gingter - Il est étrange que cela ne fonctionne pas. Avez-vous essayé d'autres séquences d'échappement ?

0 votes

Oui. L'ensemble du fichier Web.config ne peut pas être analysé si l'on utilise "" et "& quot ; n'est pas remplacé par " dans la chaîne et la chaîne de requête ne peut pas être analysée, ce qui entraîne l'erreur indiquée. Si c'était aussi simple, je n'aurais pas posé la question ici ;-)

66voto

Emanuele Greco Points 5089
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Comme le web.config est un fichier XML, vous devez échapper les cinq caractères spéciaux :

&amp; -> & esperluette, U+0026
&lt; -> < crochet d'angle gauche, signe moins que, U+003C
&gt; -> > crochet d'angle droit, signe plus grand que, U+003E
&quot; -> " guillemet, U+0022
&apos; -> ' apostrophe, U+0027

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


Duc Filan ajoute : Vous devez également entourer votre mot de passe de guillemets simples. ' :

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

0 votes

C'était l'esperluette pour moi, dans un mot de passe, stocké dans le web.config. C'est évident, mais en même temps, ce n'est pas évident à trouver. L'erreur qu'un site Web Azure vous donne lorsque c'est le cas dans le web.config - "La page ne peut pas être affichée car une erreur de serveur interne s'est produite." Il ne semble pas non plus écrire quoi que ce soit dans les journaux d'erreurs. Merci à l'OP pour la question et à vous pour ce rappel.

0 votes

Et les crochets ? ([])

0 votes

Et ; caractère ?

2voto

Earl Points 21

Si &quot; ne fonctionne pas, essayez &#34; à la place.

1voto

Ritzelprimpf Points 76

La réponse d'Odeds est presque complète. Juste une chose à ajouter.

  1. Escape xml chars spéciaux comme l'a dit Emanuele Greco.
  2. Mettez le mot de passe entre guillemets simples comme l'a dit Oded.
  3. (celui-ci est nouveau) Echapper aux ticks simples avec un autre tick simple ( réf. )

ayant ce password="' ; cela devrait être une chaîne de connexion valide :

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

0voto

spinon Points 6362

Utilisez &quot; Ça devrait marcher.

0 votes

Non, ça ne marche pas. j'ai déjà essayé avant de demander ici... je n'aurais pas demandé...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X