28 มีนาคม 2558

ASP.NET connect to a DBF file

การเชื่อมต่อกับไฟล์ dbf ด้วย ASP.NET

ก่อนอื่นให้ทำการ Download File VFPOleDB จากนั้นทำการติดตั้ง โปรแกรม (VFPOLEDBSetup.msi)

1. เปิดโปรแกรม Visual Studo 20xx  เลือก New Project....
2. คลิกที่รายการ Web -> ASP.NET Empty Web Application แล้วตั้งชื่อที่ช่อง Name: WebForm1
3. ทำการ Add -> New Item... -> Web Form ขึ้นมา

4. ไปที่เมนู PROJECT หรือ WEBSITE เลือกรายการ Add Refrence...
5. ที่หน้าต่าง Reference Manager ให้เลือกที่รายการ COM -> Type Libraries
     ติ๊กเลือก Microsoft OLE DB Provider for Visual FoxPro 7.0 Type Library ตามภาพ แล้วคลิก OK














6. ทำการเขียนคำสั่ง ในส่วนของ Web Form เช่น
ต้องการเรียกดูข้อมูลจากตาราง D:\CSS\Data\GROUP.dbf
ส่วนคำสั่ง SQL ทำการ Select ข้อมูล เฉพาะที่กำหนด 
เขียนคำสั่ง ดังนี้ (ปรับเปลี่ยนตามข้อมูลของแต่ละท่าน)

Imports System.Data

Partial Class WebForm1
    Inherits System.Web.UI.Page
    Dim DataDBF As String = "D:\CSS\Data\"
    Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
    Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing
    Dim retVal As Integer = 0
    Dim reader As OleDb.OleDbDataReader
    Dim cSearch As String
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Try

            'if use visual fox pro Connect to a single DBF-file
            ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
            dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
            dBaseConnection.Open()
            cSearch = "อ"      ' ค้นหาตัวอักษร อ
            sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
            dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
            'myDA = New OleDbDataAdapter(comm)
            'dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
            retVal = dBaseCommand.ExecuteNonQuery()
            reader = dBaseCommand.ExecuteReader()
            While reader.Read()
                Response.Write(reader("gr_code").ToString & " ")
                ' second column
                Response.Write(reader("gr_desc").ToString & " ")
                'intCount = intCount + 1
            End While
            dBaseConnection.Close()
        Catch ex As OleDb.OleDbException
            Response.Write(ex.Message)
        End Try
    End Sub
End Class

ทำการบันทึกแล้วเรียกดู จะปรากฏข้อมูล ดังภาพ

















จากตัวอย่างข้างต้นเป็นตัวอย่างการใช้ออปเจ็กต์ Reader เพื่ออ่านเรคคอร์ดทีละรายการเพื่อทำการแสดงโดยผ่านคำสั่ง HTML ภายใต้ Response.Write

สำหรับตัวอย่างต่อไปนี้ จะเป็นการแสดงข้อมูลผ่านทาง GridView
ให้ทำการลาก GridView มาไว้ที่เว็บฟอร์ม ดังภาพ


ตั้งชื่อ GridView -> GridView1









จากนั้น ก็ดัดแปลงคำสั่งใหม่ดังนี้

Imports System.Data

Partial Class WebForm1
    Inherits System.Web.UI.Page

    Dim DataDBF As String = "D:\CSS\Data\"
    Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
    Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing

    Dim cSearch As String

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        Try
            'if use visual fox pro Connect to a single DBF-file
            ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
            dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
            dBaseConnection.Open()
            cSearch = "อ"      ' ค้นหาตัวอักษร อ
            sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
            dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)

            '
            Dim dt As DataTable = GetData(dBaseCommand)
            GridView1.DataSource = dt
            GridView1.DataBind()
            '
            dBaseConnection.Close()
        Catch ex As OleDb.OleDbException
            Response.Write(ex.Message)
        End Try
    End Sub


    Private Function GetData(ByVal cmd As OleDb.OleDbCommand) As DataTable
        Dim dt As New DataTable()
        Dim sda As New OleDb.OleDbDataAdapter()
        cmd.CommandType = CommandType.Text
        cmd.Connection = dBaseConnection
        sda.SelectCommand = cmd
        sda.Fill(dt)
        sda.Dispose()
        Return dt
    End Function
End Class

หลังจากนั้น ก็ทำการบันทึก แล้วเรียกโปรแกรมดู

จะปรากฎข้อมูลดังตัวอย่าง




















สวัสดี มีสุข



4 ความคิดเห็น:

Unknown กล่าวว่า...
ความคิดเห็นนี้ถูกผู้เขียนลบ
Unknown กล่าวว่า...

การเชื่อมต่อแบบนี้ Import อะไรบ้างครับ

Unknown กล่าวว่า...

หากต้องการแสดงข้อมูลที่ Gridview ด้วย Button ต้องเขียนอย่างไรครับ

Unknown กล่าวว่า...

ขอบคุณมากครับที่สละเวลา เป็นแนวทางที่ดีมากๆครับ

"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.