ผู้เขียน หัวข้อ: Visual Basic .NET กับการแสดงโครงสร้างรูปแบบฐานข้อมูล (Schema) Access 2003/2007+  (อ่าน 289 ครั้ง)

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
ก็แปลกดีที่เรื่อง Schema DataBase หรือโครงสร้างรูปแบบฐานข้อมูล ไม่ค่อยมีผู้คนกล่าวถึงมากมายนัก ทั้งๆที่ประโยชน์ในการนำไปใช้งานมันค่อนข้างจะเยอะแยกมากมายสารพัดอย่าง เพราะจะช่วยให้นักพัฒนาซอฟท์แวร์ได้บริหารจัดการ ตัวฐานข้อมูลได้โดยตรง แต่ก็ไม่เป็นไรแอดมินก็ได้อารัมภบทและร่ายเวทมนต์แจกโค้ดเกี่ยวกับเรื่องของ Schema DataBase ไปแล้ว 2 ภาคสำหรับ VB6 คือ Visual Basic 6 กับ ADOX (ActiveX Data Object eXtensions) - ปฐมบท และ Visual Basic 6 กับ ADOX ตอนแสดงโครงสร้างรูปแบบฐานข้อมูล (Schema) ... คราวนี้ถึงทีของ Visual Basic .NET (2010) กันบ้างครับผม


ตัวอย่างการอ่าน Schema MS Access 2003 และ 2007 ขึ้นไป โดยการใช้ Microsoft.ACE.OLEDB.12.0 ตัวอย่างเช่น
ColumnName = ชื่อฟิลด์ข้อมูล
ColumnSize = ขนาดของฟิลด์ข้อมูล หน่วยเป็นไบต์ (ดูจาก DataType)
DataType = ชนิดข้อมูล

มาดูโค้ดกันเถอะ

ส่วนของการเลือกไฟล์ (Browse) MS Access เข้ามา

Imports System.Data.OleDb

โค๊ด: [Select]
    Dim Conn As OleDbConnection
    Dim MyTable As DataTable

    ' / ------------------------------------------------------------------
    Private Sub btnBrowse_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowse.Click
        ' ประกาศใช้งาน Open File Dialog ในแบบ Run Time
        Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()

        ' / ตั้งค่าการใช้งาน Open File Dialog
        With dlgOpenFile
            .InitialDirectory = Application.StartupPath
            .Title = "เลือกไฟล์ MS Access"
            .Filter = "MS Access Files (*.mdb;*.accdb)|*.mdb;*.accdb"
            .FilterIndex = 1
            .RestoreDirectory = True
        End With

        Dim strConn As String = ""
        ' หากเลือกปุ่ม OK หลังจากการ Browse ...
        If dlgOpenFile.ShowDialog() = DialogResult.OK Then
            lvwData.Items.Clear()
            txtFileName.Text = dlgOpenFile.FileName
            strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
                dlgOpenFile.FileName & ";"

            Conn = New OleDbConnection(strConn)
            Conn.Open()

            ' อ่านค่ารายชื่อตาราง (TABLE) หากต้องการเห็นแบบสอบถาม (Query) ให้เปลี่ยนเป็น VIEW น่ะครับ
            MyTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                          New Object() {Nothing, Nothing, Nothing, "TABLE"})

            ' แสดงรายชื่อตาราง (Table)
            cmbTable.Items.Clear()
            For i = 0 To MyTable.Rows.Count - 1
                cmbTable.Items.Add(MyTable.Rows(i)!TABLE_NAME.ToString)
            Next i
        End If
    End Sub


ส่วนของการเลือกตาราง (Table)

โค๊ด: [Select]
    ' / ------------------------------------------------------------------
    Private Sub cmbTable_SelectedIndexChanged(sender As System.Object, _
                                              e As System.EventArgs) Handles cmbTable.SelectedIndexChanged

        lvwData.Items.Clear()
        ' ค้นคืน Schema เพื่ออ่านหลัก (Column) หรือ ฟิลด์ (Field) จากตารางที่เลือก
        Dim cmd As OleDbCommand = New OleDbCommand(cmbTable.Text, Conn)
        ' CommandType Enumeration มี 3 แบบคือ
        ' StoredProcedure - The name of a stored procedure.
        ' TableDirect - The name of a table.
        ' Text - SQL text command. (ค่า Default)
        cmd.CommandType = CommandType.TableDirect
        ' https://msdn.microsoft.com/en-us/library/system.data.commandtype(v=vs.110).aspx

        ' อ่านเฉพาะ Schema เท่านั้น
        Dim Reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SchemaOnly)

        ' รับข้อมูลโครงสร้างตาราง (Table)
        Dim SchemaTable As DataTable = Reader.GetSchemaTable()

        ' แสดง Column Header ของแต่ละตารางทั้งหมด เช่น ชื่อ ขนาด ชนิดข้อมูล
        Dim col As DataColumn
        lvwData.View = View.Details
        For Each col In SchemaTable.Columns
            lvwData.Columns.Add(col.ColumnName, 100, HorizontalAlignment.Left)
        Next

        ' แสดงรายละเอียดโครงสร้างตารางข้อมูล (Schema)
        Dim row As DataRow
        Dim ColCount As Integer = SchemaTable.Columns.Count
        For Each row In SchemaTable.Rows
            Dim ArrayList(ColCount) As String
            Dim ColIdx As Integer
            ' เก็บรายละเอียดของแต่ละฟิลด์ข้อมูลไว้ใน Array List
            For ColIdx = 0 To ColCount - 1
                ArrayList(ColIdx) = Convert.ToString(row(ColIdx))
            Next

            ' ดึงข้อมูลจาก Array List มาแสดงผลใน ListView Control
            Dim NewItem As ListViewItem = New ListViewItem(ArrayList)
            lvwData.Items.Add(NewItem)
        Next
        cmd.Dispose()
        Reader.Close()
    End Sub

พวกตัวประกอบ

โค๊ด: [Select]
    Private Sub frmViewDataBaseNet_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Conn.Close()
        Application.Exit()
    End Sub

    Private Sub frmViewDataBaseNet_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ' Initialize ListView Control
        With lvwData
            .View = View.Details
            .GridLines = True
            .FullRowSelect = True
            .HideSelection = False
            .MultiSelect = False
        End With
    End Sub

    Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub

ดาวน์โหลดโค้ดต้นฉบับ VB.Net (2010) ได้ที่นี่

บันทึกการเข้า
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

ออฟไลน์ naien

  • Newbie
  • *
  • กระทู้: 36
ขอบคุณมากครับ

บันทึกการเข้า

ออฟไลน์ csedit

  • Newbie
  • *
  • กระทู้: 1
ขอบคุณครับ งมหามา 2 วันแล้ว

บันทึกการเข้า