เพื่อนๆ หลายๆ คนประสบปัญหา Relative Path ของฐานข้อมูล ACCESS ในโปรแกรม .net ซึ่งทำให้ต้องแก้ไข web.config ทุกครั้งที่ย้ายโปรแกรม
เส้นทางฐานข้อมูลในสตริงการเชื่อมต่อฐานข้อมูล
หลายๆ คนเขียนข้อความต่อไปนี้ใน web.config:
<การตั้งค่าแอป>
<เพิ่มคีย์="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:webApp_DataData.mdb)">
การตั้งค่าแอป>
โปรแกรมเขียนดังนี้:
MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//หมายเหตุ: ConfigurationSettings เขียนต่างกันใน VS2005 และ VS2003 ตรวจสอบความแตกต่างเฉพาะด้วยตนเอง
ด้วยวิธีนี้ เมื่อโปรแกรมกำลังทำงานอยู่ เกิดข้อผิดพลาดดังกล่าว เนื่องจากมักจะได้รับแจ้งต่อไปนี้:
'C:WINDOWSsystem32~App_DataData.mdb' ไม่ใช่เส้นทางที่ถูกต้อง ตรวจสอบว่าสะกดชื่อเส้นทางถูกต้องหรือไม่ และคุณเชื่อมต่อกับเซิร์ฟเวอร์ที่เก็บไฟล์ไว้หรือไม่ แหล่งข้อมูล=~App_DataData.mdb
แม้ว่าเส้นทางที่แน่นอนจะถูกต้อง แต่ web.config จะต้องได้รับการแก้ไขเมื่อทำการย้ายโปรแกรม ดังนั้นจึงยุ่งยากมากกว่า
ยังมีวิธีใช้ Server.MapPath เช่น ASP ใน web.config เพื่อรับเส้นทางฐานข้อมูล แต่ web.config ไม่รู้จัก Server.MapPath ดังนั้นวิธีนี้จึงใช้ไม่ได้ผล
ต่อมา จากการสำรวจและอ้างอิงถึงโปรแกรมอื่นๆ ผมได้สรุปวิธีการต่อไปนี้ ซึ่งสามารถย้ายเส้นทางของโปรแกรมได้อย่างง่ายดายโดยไม่ต้องแก้ไขเส้นทางฐานข้อมูล ACCESS
สิ่งที่ฉันเขียนใน web.config เป็นดังนี้:
<เพิ่มคีย์ =ค่า "SQLConnString" = "ผู้ให้บริการ = microsoft.jet.oledb.4.0; แหล่งข้อมูล = "/>
<เพิ่มคีย์ = "dbPath" value = "~/App_Data/mydata.mdb"/>
การตั้งค่าแอป>
ในคลาสการเข้าถึงข้อมูลในโปรแกรม ฉันเอา "SQLConnString" และ "dbPath" ออกแล้วเชื่อมต่อเข้ากับสตริง "CONN_STRING_NON_DTC"
สตริงสาธารณะแบบอ่านอย่างเดียวคงที่ CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"]) + ";";
นี่คือวิธีการเขียนใน VS2005 ฉันกำหนด CONN_STRING_NON_DTC เป็นแบบอ่านอย่างเดียวเพื่อความสะดวกในการใช้งาน
ด้วยวิธีนี้คุณสามารถย้ายโปรแกรมของคุณได้ตามใจชอบโดยไม่ต้องสนใจเส้นทางของฐานข้อมูลเลย ^_^ เหมาะสำหรับคนขี้เกียจอย่างฉัน!