Escape quote ในสตริงการเชื่อมต่อ web.config


89

ฉันมีสตริงการเชื่อมต่อในการกำหนดค่าเว็บของฉัน:

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

อย่างที่คุณเห็นมีเครื่องหมายคำพูด (") ในรหัสผ่าน (กำหนดจากแผนกอื่นฉันไม่สามารถเปลี่ยนรหัสผ่านผู้ใช้ db นี้ได้)

ฉันต้องหลีกเลี่ยงเครื่องหมายคำพูดในสตริงการเชื่อมต่อนี้อย่างไร

Btw: ฉันลองแล้ว & quot; ในสตริง ไม่ได้ผล - adogumenException แล้ว: "รูปแบบของสตริงการเริ่มต้นไม่เป็นไปตามข้อกำหนดเริ่มต้นที่ดัชนี 57" 57 คือที่ & quot; อยู่ในสตริงการเชื่อมต่อของฉัน ฉันยังลองใส่ส่วนรหัสผ่านใน '- ก็ไม่ได้ผลเช่นกัน

ลองใช้ "" และ \ "แล้ว - ไม่สามารถแยกวิเคราะห์ web.config ได้

ขอบคุณสำหรับการแก้ปัญหา:

ฉันต้องรวมการหลบหนีของเครื่องหมายคำพูดคู่และใส่รหัสผ่านในเครื่องหมายคำพูดเดี่ยว:

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

คำตอบ:


110

ใช้&quot;แทน"การหลบหนี

web.config เป็นไฟล์ XML ดังนั้นคุณควรใช้ XML Escape

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

ดูนี้ฟอรั่ม

อัปเดต :

&quot;ควรใช้งานได้ แต่ไม่เป็นเช่นนั้นคุณได้ลองใช้ลำดับการหลีกเลี่ยงสตริงอื่น ๆ สำหรับ. NET แล้วหรือยัง \"และ"" ?

อัปเดต 2:

ลองใช้เครื่องหมายคำพูดเดี่ยวสำหรับการเชื่อมต่อ

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

หรือ:

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

อัปเดต 3:

จากMSDN (SqlConnection.ConnectionString Property):

ในการรวมค่าที่มีอัฒภาคอักขระอัญประกาศเดี่ยวหรืออักขระอัญประกาศคู่ค่าจะต้องอยู่ในเครื่องหมายคำพูดคู่ หากค่ามีทั้งอักขระอัฒภาคและเครื่องหมายอัญประกาศคู่ค่าสามารถอยู่ในเครื่องหมายคำพูดเดี่ยว

ดังนั้น:

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

ปัญหาไม่ได้อยู่ที่ web.config แต่เป็นรูปแบบของสตริงการเชื่อมต่อ ในสตริงการเชื่อมต่อถ้าคุณมี"ในค่า (คู่ค่าคีย์) 'คุณต้องใส่ค่าใน ดังนั้นในขณะที่Password=somepass"wordไม่ได้ทำงาน Password='somepass"word'ไม่ได้


วิธีนี้ใช้ไม่ได้ สิ่งนี้จะใช้ได้ผลถ้าเป็น xml ธรรมดา แต่ไม่อยู่ในค่าแอตทริบิวต์
Sebastian PR Gingter

@Sebastian PR Gingter - แปลกที่ไม่ได้ผล คุณลองใช้ลำดับการหลบหนีอื่น ๆ หรือไม่?
Oded

ใช่. ไม่สามารถแยกวิเคราะห์ Web.config ทั้งหมดได้เมื่อใช้ "" และ \ "& quot; จะไม่ถูกแทนที่ด้วย" ภายในสตริงและไม่สามารถแยกวิเคราะห์สตริงการสืบค้นได้ทำให้เกิดข้อผิดพลาดที่ระบุไว้ ถ้ามันง่ายขนาดนั้นฉันจะไม่ถามที่นี่ ;-)
Sebastian PR Gingter

1
@Sebastian PR Gingter - ผู้คนที่นี่ไม่สามารถคาดเดาสิ่งที่คุณได้ลองและสิ่งที่คุณรู้ คุณต้องใส่รายละเอียดดังกล่าวในคำถามของคุณ (ตามที่คุณมี)
Oded

web.config ของคุณใช้การเข้ารหัสอะไร
Matthew Abbott

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

เนื่องจาก web.config เป็น XML คุณจึงต้องหลีกเลี่ยงอักขระพิเศษห้าตัว:

&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 เห็นได้ชัดว่าในขณะเดียวกันก็ไม่ค่อยชัดเจนในการติดตาม ข้อผิดพลาดที่เว็บไซต์ Azure ให้คุณเมื่อเป็นกรณีนี้ใน web.config - "ไม่สามารถแสดงเพจได้เนื่องจากเกิดข้อผิดพลาดภายในเซิร์ฟเวอร์" ดูเหมือนจะไม่เขียนอะไรลงในบันทึกข้อผิดพลาดเช่นกัน ขอบคุณ OP สำหรับคำถามและคุณสำหรับการแจ้งเตือนนี้
Timothy Lee Russell

แล้ววงเล็บเหลี่ยมล่ะ? ([])
Dzianis Yafimau

และ;อุปนิสัย?
Kiquenet


1

คำตอบของ Odeds เกือบจะสมบูรณ์แล้ว เพียงสิ่งเดียวที่จะเพิ่ม

  1. Escape xml ตัวอักษรพิเศษเช่น Emanuele Greco กล่าว
  2. ใส่รหัสผ่านในเครื่องหมายคำพูดเดียวเหมือนที่ Oded กล่าว
  3. (อันนี้ใหม่) หนีเห็บเดียวกับอีกขีดเดียว ( อ้างอิง )

มีรหัสผ่านนี้ = "'; นี่ควรเป็นสตริงการเชื่อมต่อที่ถูกต้อง:

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

ฉันคิดว่าคุณหมายถึงpassword='''';ใช้ได้ แต่คำแนะนำของคุณเป็นสิ่งเดียวที่เหมาะกับฉัน สิ่งนี้ถูกใช้ในรูปแบบการหลบหนีอื่น ๆ เช่นกัน
Bluebaron

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.