HOW TO: เรียกข้อมูลเมตาจาก Excel โดยใช้วิธีการ GetOleDbSchemaTable ใน Visual Basic .NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 318373 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความที่มีการทีละขั้นตอนนี้อธิบายถึงวิธีการที่ดึงข้อมูลเมตาของตารางและคอลัมน์จากแหล่งข้อมูลของ Microsoft Excel โดยใช้การGetOleDbSchemaTableวิธีกับผู้ที่ Microsoft OLE DB ที่จัดการให้และผู้ที่ Microsoft OLE DB ให้สำหรับ Jet

กระบวนการGetOleDbSchemaTableวิธีการที่เปิดเผยโดยSystem.Data.OleDbคลาสของ Microsoft .NET Framework จะทำต่อ.NET ไปOpenSchemaวิธีการในเวอร์ชันก่อนหน้าของออปเจ็กต์ข้อมูล ActiveX ของ Microsoft (ADO)

คำอธิบายเกี่ยวกับเทคนิค

หลังจากที่คุณเชื่อมต่อกับแหล่งข้อมูล Excel โดยใช้ ADO.NET คุณแยกรายการของข้อมูลเมตาของตาราง โดยใช้GetOleDbSchemaTableจากนั้น ใช้วิธีการเดียวกันกับอาร์กิวเมนต์ที่แตกต่างกันเพื่อขอรับข้อมูลเมตาของคอลัมน์สำหรับตารางที่เลือก คุณยังสามารถใช้เป็นDataGridTableStyleวัตถุการจัดเค้าโครง และการจัดรูปแบบแบบสอบถามของคุณส่งผลในเส้นตารางข้อมูล

ความต้องการ

รายการต่อไปนี้แสดงฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ โครงสร้างพื้นฐานของเครือข่าย และ service pack ที่คุณต้องการ:
  • Studio .NET ที่แสดงผลที่ติดตั้งอยู่บนระบบปฏิบัติการ Microsoft Windows เข้ากันได้
  • แฟ้มสมุดงาน (.xls) Microsoft Excel อย่างน้อยหนึ่งแถวและคอลัมน์ของข้อมูล
บทความนี้อนุมานว่า คุณมี familiarity น้อยพื้นฐานกับหัวข้อต่อไปนี้:
  • visual Basic .NET
  • การเข้าถึงข้อมูล ADO.NET
  • สมุดงาน Excel และแผ่นงาน

ตัวอย่าง

  1. เริ่มการทำงานของ Microsoft Visual Studio .NET และสร้างโครงการใหม่ของแอพลิเคชัน Windows .NET Visual Basic
  2. เพิ่ม 3ปุ่มตัวควบคุมและสองDataGridตัวควบคุมฟอร์มเริ่มต้น (Form1) การเปลี่ยนแปลงนั้นข้อความคุณสมบัตินี้ปุ่มควบคุมการดึงข้อมูลเมตา,รายการตารางรูปแบบและรูปแบบคอลัมน์รายการตามลำดับ
  3. สลับไปยังโมดูรหัสของฟอร์ม และเพิ่มต่อไปนี้นำเข้าคำชี้แจงด้านบน:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. แทรก declarations ระดับโมดูลต่อไปนี้ในการแบบฟอร์มคลาหลังจากบรรทัด "System.Windows.Forms.Form ที่สืบทอด" การปรับปรุงสตริงการเชื่อมต่อตามความจำเป็นให้ชี้ไปที่แฟ้มสมุดงาน Excel ที่ประกอบด้วยแถวและคอลัมน์ของข้อมูลบางอย่าง
        Dim cn As OleDbConnection
        Dim strCn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=c:\test.xls;Extended Properties=Excel 8.0"
        Dim dtTables As DataTable
        Dim WithEvents cm As CurrencyManager
        Dim dtColumns As DataTable
        Dim dvColumns As DataView
  5. แทรกรหัสต่อไปนี้ในการแบบฟอร์มคลาหลังจากพื้นที่ "การออกแบบฟอร์ม Windows สร้างรหัส" รหัสนี้เรียกGetOleDbSchemaTableโหลดรายการตารางและคอลัมน์ populatesDataGridควบคุม และการปรับปรุงรายการคอลัมน์เมื่อเปลี่ยนแปลงตารางที่เลือก
        Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
            Call GetTablesList()
        End Sub
    
        Private Sub GetTablesList()
            cn = New OleDbConnection(strCn)
            cn.Open()
            dtTables = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            DataGrid1.DataSource = dtTables
            DataGrid1.ReadOnly = True
            cn.Close()
            Call GetColumnsList()
        End Sub
    
        Private Sub GetColumnsList()
            If cm Is Nothing Then
                cm = CType(Me.BindingContext(dtTables), CurrencyManager)
            End If
            Dim r As Integer = cm.Position
            Dim strTable As String = dtTables.Rows(r)("TABLE_NAME")
            cn = New OleDbConnection(strCn)
            cn.Open()
            dtColumns = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, _
                New Object() {Nothing, Nothing, strTable, Nothing})
            dvColumns = New DataView(dtColumns)
            dvColumns.Sort = "ORDINAL_POSITION"
            DataGrid2.DataSource = dvColumns
            DataGrid2.ReadOnly = True
            cn.Close()
        End Sub
    
        Private Sub cm_PositionChanged(ByVal sender As Object, _
                ByVal e As System.EventArgs) Handles cm.PositionChanged
            Call GetColumnsList()
        End Sub
  6. แทรกรหัสต่อไปนี้เพื่อจัดเค้าโครง และการจัดรูปแบบตารางDataGridโดยการใช้TableStyles. หมายเหตุการใช้PropertyDescriptorเพื่อให้ง่ายต่อการไม่ใช่ค่าเริ่มต้นการจัดรูปแบบของคอลัมน์วัน
        Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button2.Click
            Call FormatTablesGrid(dtTables)
        End Sub
    
        Private Sub FormatTablesGrid(ByVal dt2format As DataTable)
            Dim gs As DataGridTableStyle = New DataGridTableStyle()
            gs.MappingName = dt2format.TableName
    
            Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()
            With cs
                .MappingName = "TABLE_NAME"
                .HeaderText = "Table Name"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "TABLE_TYPE"
                .HeaderText = "Table Type"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            Dim cm As CurrencyManager = CType(Me.BindingContext(dt2format), CurrencyManager)
            Dim pd As PropertyDescriptor = cm.GetItemProperties()("DATE_CREATED")
    
            cs = New DataGridTextBoxColumn(pd, "d")
            With cs
                .MappingName = "DATE_CREATED"
                .HeaderText = "Date Created"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cm = CType(Me.BindingContext(dt2format), CurrencyManager)
            pd = cm.GetItemProperties()("DATE_MODIFIED")
    
            cs = New DataGridTextBoxColumn(pd, "d")
            With cs
                .MappingName = "DATE_MODIFIED"
                .HeaderText = "Date Modified"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            DataGrid1.TableStyles.Add(gs)
            Me.Button2.Enabled = False
    
        End Sub
  7. แทรกรหัสต่อไปนี้เพื่อจัดเค้าโครง และการจัดรูปแบบคอลัมน์การDataGridโดยการใช้TableStyle:
        Private Sub Button3_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button3.Click
            Call FormatColumnsGrid(dtColumns)
        End Sub
    
        Private Sub FormatColumnsGrid(ByVal dt2format As DataTable)
            Dim gs As DataGridTableStyle = New DataGridTableStyle()
            gs.MappingName = dtColumns.TableName
    
            Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()
            With cs
                .MappingName = "COLUMN_NAME"
                .HeaderText = "Column Name"
                .Width = 100
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "ORDINAL_POSITION"
                .HeaderText = "Ordinal Position"
                .Width = 100
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "DATA_TYPE"
                .HeaderText = "Data Type"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "CHARACTER_MAXIMUM_LENGTH"
                .HeaderText = "Text Length"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "NUMERIC_PRECISION"
                .HeaderText = "Numeric Precision"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            DataGrid2.TableStyles.Add(gs)
            Me.Button3.Enabled = False
    
        End Sub
  8. เรียกใช้โครงการ
  9. คลิกดึงข้อมูลเมตาเมื่อต้องการกรอกข้อมูลตารางรายการ (DataGrid1) กับคอลัมน์ของข้อมูลที่ส่งคืนสำหรับแต่ละตารางในสมุดงาน Excel โดย ทั้งหมดGetOleDbSchemaTable. กระบวนการคอลัมน์กรอกข้อมูลในเวลาเดียวกับคอลัมน์ของข้อมูลที่จะส่งกลับทั้งหมดสำหรับคอลัมน์ในตารางแรกในรายการ (DataGrid2)ตารางรายการ
  10. เลือกตารางอื่นในการตารางรายการ กระบวนการคอลัมน์การเปลี่ยนแปลงการแสดงคอลัมน์จากตารางที่เลือกได้เนื่องจากการแสดงรายการนี้cm_PositionChangedตัวจัดการเหตุการณ์ที่คุณมีการใช้งาน
  11. คลิกรายการตารางรูปแบบเมื่อต้องการกำหนดค่า และใช้แบบ TableMappingStyle DataGrid1 ซึ่งทำให้เป็นมาก "มิตร" ส่วนหัวของคอลัมน์ และแสดงเฉพาะคอลัมน์ที่สี่ของข้อมูลที่เป็นประโยชน์จากคอลัมน์ nine ที่ส่งกลับโดยGetOleDbSchemaTable. แสดงคอลัมน์เหล่านี้:
    table_name
    table_type
    date_created
    date_modified
    คอลัมน์ช่องว่างเหล่านี้ไม่ได้แสดง:
    table_catalog
    table_schema
    table_guid
    คำอธิบาย:
    table_propid
  12. คลิกรูปแบบคอลัมน์รายการเมื่อต้อง การกำหนด และ การใช้เป็น TableMappingStyle DataGrid2 ซึ่งทำให้เป็นมาก "มิตร" ส่วนหัวของคอลัมน์ และแสดงเฉพาะ 5 ประโยชน์คอลัมน์ของข้อมูลจากคอลัมน์ที่ 28 ที่ส่งคืนโดยGetOleDbSchemaTable.
    column_name
    ordinal_position
    data_type
    maximum_character_length
    numeric_precision
    คอลัมน์ที่ว่างเปล่า mostly เหล่านี้ไม่ได้แสดง:
    table_catalog
    table_schema
    TABLE_NAME (ทราบอยู่แล้ว)
    column_guid
    column_propid
    COLUMN_HASDEFAULT (เท็จเสมอ)
    column_default
    column_flags
    IS_NULLABLE (จริงเสมอ)
    type_guid
    character_octet_length
    numeric_scale
    datetime_precision
    character_set_catalog
    character_set_schema
    character_set_name
    collation_catalog
    collation_schema
    collation_name
    domain_catalog
    domain_schema
    ชื่อโดเมน
    คำอธิบาย:
  13. คลิกแถวที่แตกต่างกันใน DataGrid1 เพื่อเลือกตารางอื่น กระบวนการคอลัมน์รายการถูกปรับปรุงโดยอัตโนมัติ TableStyles ที่คุณประยุกต์ใช้กับแต่ละก่อนหน้านี้DataGridยังคงมีผล

การแก้ไขปัญหา

  • ชนิดของข้อมูลคอลัมน์ที่ถูกส่งกลับโดยGetOleDbSchemaTableสำหรับ Excel มี แหล่งข้อมูลจะไม่เหมือนกันในกรณีที่ทั้งหมดกับชนิดของข้อมูลที่ส่งกลับโดยOpenSchemaวิธีการในคลาสสิ ADO:
    ยุบตารางนี้ขยายตารางนี้
    ชนิดคอลัมน์ADO คลาสสิกado.net (ole db)
    ตัวเลข5 adDouble5 OleDbType.Double
    สกุลเงิน6 adCurrency6 OleDbType.Currency
    วันที่/เวลา7 adDate7 OleDbType.Date
    Boolean11 adBoolean11 OleDbType.Boolean
    ข้อความ<>202 ด้วย adVarWChar130 OleDbType.WChar
    บันทึก203 adLongVarWChar130 OleDbType.WChar
  • GetOleDbSchemaTableเหมือนกับOpenSchemaส่งกลับค่าคอลัมน์เดียว "F1" จากแผ่นว่างงาน Excel ถึงแม้ว่าใน fact มีที่อยู่ของส่วนหัวไม่มีข้อมูลหรือคอลัมน์

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
257819HOWTO: ใช้ ADO กับข้อมูล Excel จาก Visual Basic หรือ VBA

คุณสมบัติ

หมายเลขบทความ (Article ID): 318373 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
Keywords: 
kbhowtomaster kbprovider kbmt KB318373 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:318373

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com