Web.config สำหรับ ฐานข้อมูล Microsoft Access และการระบุ Path

เรื่องนี้อาจจะเป็นกรณีศึกษาถึงความงี่เง่าของผมก็ได้ครับ แต่ก็พยายมแก้ปัญหาในเรื่องของการนำเอา ASP.NET มาใช้กับเว็บจริงๆ จังๆ แต่ก็เจอปัญหาหลายอย่างที่ไม่คาดคิดน่ะครับในการติดต่อฐานข้อมูล Access แต่คาดว่าหลายเคย อาจจะเจอปัญหาอย่างที่ผมเจอ และกำลังหาทางออกเช่นกัน

กรณีนี้ ใช้ VS 2005 Express Edition ครับ

การสร้างฐานข้อมูล
   ผมเป็นคนหนึ่งที่เคยเขียน ASP Version เดิมโดยสามารถวางฐานข้อมูล Access ไว้ในที่ใดก็ได้ในเว็บ เพราะความเคยชินนี้ทำให้เกิดปัญหาหลายๆอย่างใน ASP.NET ซึ่งหากเราไม่ใช้ความสามารถของ Gridview และ  connectionString ที่ใช้วิธีจับลากจาก Control แล้ว มันไม่มีปัญหาเรื่องการระบุ Path เลยครับ

เช่น เดิมเราเคยเขียนแบบนี้

‘Connect to Database

Dim Provider As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" & Server.MapPath("~/DatabaseName.mdb")
Dim conn As New OleDbConnection(Provider)
Dim Sql As String = "Select * From [Table] "
Dim AdapterSql As New OleDbDataAdapter(Sql, conn)
Dim dataset As New DataSet()
AdapterSql.Fill(dataset, "DataSetName")

กรณีโค้ดข้างบน สามารถใช้ได้ดีในกรณีที่เก่งกาจเรื่องการะบุ Path ใน web.config เป็นครับ และสามารถ Run ได้ใน Localhost แบบปกติสุข

แต่ปัญหาที่เกิดตามมานั้น มากมายมหาศาลเลยทีเดียว(สำหรับคนงี่เง่า อย่างผม)
 เนื่องจากผมใช้คอนโทรล  Gridview มาแสดงผลข้อมูล เจ้าตัว VS เลยสร้าง  connectionString ให้อัตโนมัติ (ซึ่งเป็นเรื่องที่น่ายินดี เพราะสามารถแสดงข้อมูลที่ต้องการได้อย่างรวดเร็ว) และ  connectionString ตัวนี้ ก็จะไปโผล่ในไฟล์ web.config ครับ ระบุ Path ของฐานข้อมูลให้เราเอง

แ่ต่หลังจากที่อับโหลดขึ้ไปบน Server ก็เจอปัญหาทันทีครับ เพราะมันไม่สามารถเชื่อมต่อฐานข้อมูลได้ เลยต้องหาวิธีแก้ปัญหาแบบลูกทุ่ง และสุดท้าย ก็ค้นพบทางออกดังนี้ ครับ

แก้ไขปัญหา
1. ต้องวางฐานข้อมูล *.mdb ลงใน App_data ครับ
2. ในไฟล์ web.config ให้แก้ไข connectionString ดังนี้ (อันนี้กรณีไม่มีรหัสผ่านฐานข้อมูล)

<connectionStrings>
       <add name="ConnectionStringName" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|DatabaseName.mdb" providerName="System.Data.OleDb" />

  </connectionStrings>
    <customErrors mode="Off"/>

3. ในไฟล์ *.aspx ที่ต้องการเรียกใช้ Provider ให้เพิ่มแทก DataSource ลงไปครับ เช่น

            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringName %>" ProviderName="<%$ ConnectionStrings:ConnectionStringName.ProviderName %>">
            </asp:SqlDataSource>

 4. แก้ไขการ Connect Database ครับ จากเดิมที่เราเขียนระบุ Provider กันโท่งๆ ก็แก้เป็นแบบนี้ครับ

‘–// Remark –Dim Provider As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" &
Server.MapPath("~/DatabaseName.mdb") //

‘–// Remark Dim conn As New OleDbConnection(Provider) //

‘— แก้ Conn เป็นแบบนี้แทนครับ

Dim conn As New OleDbConnection(SqlDataSource1.ConnectionString)
Dim Sql As String = "Select * From [Table] "
Dim AdapterSql As New OleDbDataAdapter(Sql, conn)
Dim dataset As New DataSet()
AdapterSql.Fill(dataset, "DataSetName")

ซึ่งการระบุ Provider แบบนี้ เราสามารถ Run ได้ ทั้งที่อยู่ใน Localhost และ Server ครับ ซึ่งอาจจะไม่ใช่วิธีที่ดีที่สุด ไม่มีหลักการอะไรทั้งสิ้นครับ แต่มันใช้ได้ ถ้าหากท่าใดมีคำชี้แนะ กรุณาบอกเป็นการกุศลด้วยจะขอบคุณมากมายครับ

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: