|
สคีมา (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) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|