[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]