web.config 연결 문자열의 이스케이프 따옴표


87

내 웹 구성에 연결 문자열이 있습니다.

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

보시다시피 암호에 인용 부호 ( ")가 있습니다 (다른 부서에서 제공했습니다.이 db 사용자 암호를 변경할 수 없습니다).

이 연결 문자열에서 따옴표를 어떻게 이스케이프해야합니까?

Btw : 나는 이미 시도했다 & quot; 문자열에서. 작동하지 않았습니다. ado.net에서 ArgumenException이 발생했습니다. "초기화 문자열의 형식이 인덱스 57에서 시작하는 사양을 따르지 않습니다." 57은 & quot; 내 연결 문자열에 있습니다. 나는 또한 암호 부분을 '-'로 묶어 보았지만 작동하지 않았습니다.

""및 \ "도 시도했습니다-web.config를 구문 분석 할 수 없습니다.

솔루션에 감사드립니다.

큰 따옴표를 이스케이프 처리하고 암호를 작은 따옴표로 묶어야했습니다.

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

답변:


109

탈출하는 &quot;대신 사용하십시오 ".

web.config는 XML 파일이므로 XML 이스케이프를 사용해야합니다.

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

이 포럼 스레드를 참조하십시오 .

업데이트 :

&quot;작동하지만 그렇지 않은 경우 .NET에 대한 다른 문자열 이스케이프 시퀀스를 시도해 보셨습니까? \"그리고 ""?

업데이트 2 :

connectionString에 작은 따옴표를 사용해보십시오.

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

또는:

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

업데이트 3 :

에서 MSDN (SqlConnection.ConnectionString 재산권) :

세미콜론, 작은 따옴표 또는 큰 따옴표 문자가 포함 된 값을 포함하려면 값을 큰 따옴표로 묶어야합니다. 값에 세미콜론과 큰 따옴표가 모두 포함 된 경우 값을 작은 따옴표로 묶을 수 있습니다.

그래서:

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

문제는 web.config가 아니라 연결 문자열의 형식입니다. 연결 문자열 "에서 in 값 (키-값 쌍)이있는 경우 값을 '. 따라서 Password=somepass"word작동하지 않지만 작동 Password='somepass"word'합니다.


이것은 작동하지 않습니다. 이것은 평범한 xml에 있지만 속성 값 내에 있지 않으면 눈에 띄게 작동합니다.
— Sebastian PR Gingter

@Sebastian PR Gingter-이것이 작동하지 않는다는 것이 이상합니다. 다른 이스케이프 시퀀스를 시도해 보셨습니까?
— Oded

예. ""및 \ "를 사용할 때 전체 Web.config를 구문 분석 할 수 없습니다. & quot;는 문자열 내에서"로 대체되지 않으며 쿼리 문자열을 구문 분석 할 수 없어 명시된 오류가 발생합니다. 그것은 쉽게 내가 ;-) 여기에 요청했습니다 않을 것이라고한다면
— 세바스찬 PR Gingter을

1
@Sebastian PR Gingter-여기 사람들은 당신이 시도한 것과 당신이 알고있는 것을 추측 할 수 없습니다. 귀하의 질문에 이러한 세부 정보를 포함해야합니다 (현재 보유한대로).
— Oded

web.config는 어떤 인코딩을 사용합니까?
— Matthew Abbott

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

web.config는 XML이므로 5 개의 특수 문자를 이스케이프해야합니다.

&amp;-> & 앰퍼샌드, U + 0026-
&lt; > < 왼쪽 꺾쇠 괄호,보다 작음 기호, U + 003C-
&gt; > > 오른쪽 꺾쇠 괄호,보다 큼 기호, U + 003E-
&quot; > " 따옴표 , U + 0022-
&apos; > ' 아포스트로피, U + 0027

+ 는 문제가되지 않습니다.


Duc Filan은 다음과 같이 덧붙입니다. 또한 암호를 작은 따옴표로 묶어야합니다 '.

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

web.config에 저장된 암호의 앰퍼샌드였습니다. 분명히, 동시에 추적하기에는 꽤 분명하지 않습니다. web.config의 경우 Azure 웹 사이트에서 제공하는 오류- "내부 서버 오류가 발생하여 페이지를 표시 할 수 없습니다." 오류 로그에도 아무것도 쓰지 않는 것 같습니다. 질문에 대한 OP와이 알림에 감사드립니다.
— Timothy Lee Russell

대괄호는 어떻습니까? ([])
— Dzianis Yafimau

그리고 ;캐릭터?
— Kiquenet

2

경우 &quot;다음 작동하지 않는 시도 &#34;대신에.


그리고 캐릭터 &? & amp; ?
— Kiquenet

1

Odeds 답변이 거의 완료되었습니다. 추가 할 한 가지.

  1. Emanuele Greco와 같은 XML 특수 문자를 이스케이프하십시오.
  2. Oded가 말한 것처럼 암호를 작은 따옴표로 묶으십시오.
  3. (이것은 새로운 것입니다) 다른 단일 틱으로 단일 틱 탈출 ( ref )

이 password = " '가있는 경우 유효한 연결 문자열이됩니다.

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

나는 당신이 의미하는 password='''';것이 타당 하다고 생각 합니다. 그러나 당신의 제안은 저에게 효과가 있었던 유일한 것입니다. 이것은 실제로 다른 탈출 계획에서도 사용됩니다.
— Bluebaron

0

사용하여 &quot;그 작동합니다.


아니. 작동하지 않습니다. 이미 ... 질문 않았을 것입니다 ... 여기에 요청하기 전에이 시도
— 세바스찬 PR Gingter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.