Citação de escape na string de conexão web.config

89

Eu tenho uma string de conexão na minha configuração da web:

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

Como você pode ver, há um sinal de aspas (") na senha (fornecida por outro departamento. Não consigo alterar a senha dos usuários do banco de dados).

Como faço para escapar da citação nesta string de conexão?

Aliás: eu já tentei & quot; na corda. Isso não funcionou - ado.net obteve uma ArgumenException então: "O formato da string de inicialização não está de acordo com a especificação que começa no índice 57." 57 é onde o & quot; está na minha string de conexão. Eu também tentei incluir a parte da senha em '- também não funcionou.

Também tentei "" e \ "- o web.config não pode ser analisado.

Obrigado pela solução:

Tive que combinar o escape das aspas duplas e colocar a senha entre aspas simples:

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

Respostas:

110

Use em &quot;vez de "para escapar.

web.config é um arquivo XML, portanto, você deve usar escape XML.

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

Veja este tópico do fórum.

Atualização :

&quot;deve funcionar, mas como não funciona, você tentou algumas das outras sequências de escape de string para .NET? \"e ""?

Atualização 2:

Tente aspas simples para connectionString:

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

Ou:

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

Atualização 3:

Do MSDN (propriedade SqlConnection.ConnectionString):

Para incluir valores que contenham ponto-e-vírgula, caractere de aspas simples ou aspas duplas, o valor deve ser colocado entre aspas duplas. Se o valor contiver um ponto-e-vírgula e um caractere de aspas duplas, o valor poderá ser colocado entre aspas simples.

Então:

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

O problema não é com web.config, mas com o formato da string de conexão. Em uma string de conexão, se você tiver um "em um valor (do par de valores-chave), você precisa colocar o valor entre '. Então, embora Password=somepass"wordnão funcione, Password='somepass"word'funciona.

Oded
fonte
Isso não funciona. Obviamente, isso funcionaria se estivesse em xml simples, mas não dentro de um valor de atributo.
Sebastian PR Gingter
@Sebastian PR Gingter - estranho que isso não funcione. Você tentou outras sequências de escape?
Oded
Sim. O Web.config inteiro não pode ser analisado ao usar "" e \ ". & Quot; não é substituído por" na string e a string de consulta não pode ser analisada, resultando no erro declarado. Se fosse tão fácil eu não teria perguntado aqui ;-)
Sebastian PR Gingter
1
@Sebastian PR Gingter - as pessoas aqui não conseguem adivinhar o que você tentou e o que sabe. Você precisa incluir esses detalhes em sua pergunta (como você fez agora).
Oded
Qual codificação seu web.config usa?
Matthew Abbott
63
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Como o web.config é XML, você precisa escapar os cinco caracteres especiais:

&amp;-> E & comercial, U + 0026
&lt; -> < colchete angular esquerdo, sinal menor que, U + 003C
&gt; -> > colchete angular direito, sinal maior que, U + 003E
&quot; -> " aspas, U + 0022
&apos; -> ' apóstrofo, U + 0027

+ não é um problema, suponho.


Duc Filan acrescenta: Você também deve envolver sua senha com aspas simples ':

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"
Emanuele Greco
fonte
Era o E comercial para mim, em uma senha, armazenado no web.config. Óbvio, embora ao mesmo tempo não seja óbvio de rastrear. O erro que um site do Azure fornece quando esse é o caso no web.config - "A página não pode ser exibida porque ocorreu um erro interno do servidor." Ele também não parece gravar nada nos logs de erros. Obrigado ao OP pela pergunta e a você por este lembrete.
Timothy Lee Russell
E os colchetes? ([])
Dzianis Yafimau
E ;personagem?
Kiquenet
2

se &quot;não estiver funcionando, tente &#34;.

Conde
fonte
e para personagem &? & amp; ?
Kiquenet 12/11/19
1

A resposta de Odeds está quase completa. Só uma coisa a acrescentar.

  1. Escape xml chars especiais como Emanuele Greco disse.
  2. Coloque a senha entre aspas simples, como Oded disse
  3. (este é novo) Escape de um único tique com outro único tique ( ref )

tendo esta senha = "'; deve ser uma string de conexão válida:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'
Ritzelprimpf
fonte
Eu acho que você quer dizer password='''';é válido. Mas sua sugestão é a única coisa que funcionou para mim. Isso também é usado em outros esquemas de escape.
Bluebaron
0

Use &quot;Isso deve funcionar.

spinon
fonte
Não. não funciona. já tentei antes de perguntar aqui ... não teria perguntado ...
Sebastian PR Gingter