Escape de la cita en la cadena de conexión web.config

88

Tengo una cadena de conexión en mi configuración web:

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

Como puede ver, hay un signo de cita (") en la contraseña (proporcionada por otro departamento. No puedo cambiar esta contraseña de usuarios de base de datos).

¿Cómo tengo que escapar de la cita en esta cadena de conexión?

Por cierto: ya probé & quot; en la cuerda. Eso no funcionó: ado.net obtuvo una ArgumenException y luego: "El formato de la cadena de inicialización no se ajusta a la especificación que comienza en el índice 57". 57 es donde el & quot; está en mi cadena de conexión. También intenté incluir la parte de la contraseña en '- tampoco funcionó.

También probé "" y \ "- web.config no se puede analizar entonces.

Gracias por la solucion:

Tuve que combinar el escape de las comillas dobles y poner la contraseña entre comillas simples:

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

Respuestas:

109

Úselo en &quot;lugar de "para escapar de él.

web.config es un archivo XML, por lo que debe utilizar el escape XML.

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

Vea este hilo del foro.

Actualización :

&quot;debería funcionar, pero como no lo hace, ¿ha probado algunas de las otras secuencias de escape de cadenas para .NET? \"y ""?

Actualización 2:

Pruebe las comillas simples para connectionString:

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

O:

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

Actualización 3:

Desde MSDN (propiedad SqlConnection.ConnectionString):

Para incluir valores que contengan un punto y coma, un carácter de comillas simples o comillas dobles, el valor debe ir entre comillas dobles. Si el valor contiene un punto y coma y un carácter de comillas dobles, el valor se puede escribir entre comillas simples.

Entonces:

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

El problema no es con web.config, sino con el formato de la cadena de conexión. En una cadena de conexión, si tiene un "valor in a (del par clave-valor), debe incluir el valor en '. Entonces, mientras Password=somepass"wordno funciona, Password='somepass"word'sí.

Oded
fuente
Esto no funciona. Obviamente, esto funcionaría, si estuviera en xml simple, pero no dentro de un valor de atributo.
Sebastian PR Gingter
@Sebastian PR Gingter - extraño que esto no funcione. ¿Probaste otras secuencias de escape?
Oded
Si. No se puede analizar el archivo Web.config completo cuando se usa "" y \ "." "No se reemplaza con" dentro de la cadena y la cadena de consulta no se puede analizar, lo que genera el error indicado. Si fuera tan fácil, no hubiera preguntado aquí ;-)
Sebastian PR Gingter
1
@Sebastian PR Gingter: la gente aquí no puede adivinar lo que ha intentado y lo que sabe. Debe incluir esos detalles en su pregunta (como ahora lo ha hecho).
Oded
¿Qué codificación utiliza su web.config?
Matthew Abbott
62
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Dado que web.config es XML, debe escapar de los cinco caracteres especiales:

&amp;-> & ampersand, U + 0026
&lt; -> < corchete en ángulo izquierdo, signo menor que, U + 003C
&gt; -> > corchete en ángulo recto, signo mayor que, U + 003E
&quot; -> " comillas, U + 0022
&apos; -> ' apóstrofe, U + 0027

+ no es un problema, supongo.


Duc Filan agrega: También debe envolver su contraseña con comillas simples ':

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"
Emanuele Greco
fuente
Para mí era el signo comercial, en una contraseña, almacenada en web.config. Obvio, aunque al mismo tiempo no es tan obvio rastrearlo. El error que le da un sitio web de Azure cuando este es el caso en web.config: "La página no se puede mostrar porque se ha producido un error interno del servidor". Tampoco parece escribir nada en los registros de errores. Gracias al OP por la pregunta y a ti por este recordatorio.
Timothy Lee Russell
¿Qué pasa con los corchetes? ([])
Dzianis Yafimau
¿Y ;carácter?
Kiquenet
2

si &quot;no funciona, intente en su &#34;lugar.

Conde
fuente
y para el personaje &? &erio; ?
Kiquenet
1

La respuesta de Odeds está casi completa. Solo una cosa para agregar.

  1. Escapa de caracteres especiales xml como dijo Emanuele Greco.
  2. Ponga la contraseña entre comillas simples como dijo Oded
  3. (este es nuevo) Escape de tics individuales con otro tick único ( ref )

teniendo esta contraseña = "'; esta debería ser una cadena de conexión válida:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'
Ritzelprimpf
fuente
Creo que quieres decir que password='''';es válido. Pero tu sugerencia es lo único que funcionó para mí. En realidad, esto también se usa en otros esquemas de escape.
Bluebaron
0

Use &quot;Eso debería funcionar.

girar sobre
fuente
nop. no funciona. ya intenté esto antes de preguntar aquí ... no habría preguntado ...
Sebastian PR Gingter