thongkorn โพสต์ 2019-5-24 20:17:25

[VB.NET] แจกฟรีโค้ดการอ่านโครงสร้างตารางข้อมูล MS Access

http://www.g2gnet.com/webboard/images/vbnet/viewschema.png
สคีมา (Schema) หมายถึง โครงสร้างข้อมูลหรือนิยามข้อมูล รวมถึงความสัมพันธ์ของข้อมูลในแต่ละเอ็นติตี้ ว่ามีความสัมพันธ์กันอย่างไร สำหรับโปรเจคนี้เราจะทำการอ่านโครงสร้างของตารางข้อมูลจากไฟล์ MS Access ว่าประกอบไปด้วยฟิลด์อะไรบ้าง และแต่ละฟิลด์นั้นมี Data Type หรือประเภทข้อมูลแบบไหนบ้าง ซึ่งจะนำไปใช้ประโยชน์ในกรณีที่ต้องจัดการฟิลด์ข้อมูลต่างๆ เพื่อทำการปรับปรุงโปรแกรมของเราในลักษณะแบบไดนามิค เช่น เมื่อต้องการเพิ่มฟิลด์ข้อมูลใหม่เข้าไป ก็ย่อมที่จะทำได้โดยง่าย

มาดูโค้ดกันเถอะ ...
Public Class frmViewSchemaDBNet
    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

    ' / ------------------------------------------------------------------
    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()

      '// Initialize ListView Control
      With lvwData
            .View = View.Details
            .GridLines = True
            .FullRowSelect = True
            .HideSelection = False
            .MultiSelect = False
            .AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
      End With

    End Sub

    Private Sub frmViewDataBaseNet_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
      Me.Dispose()
      Application.Exit()
    End Sub

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

    Private Sub txtFileName_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtFileName.KeyDown
      e.SuppressKeyPress = True
    End Sub
End Class


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



หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] แจกฟรีโค้ดการอ่านโครงสร้างตารางข้อมูล MS Access