Làm th? nào đ?: L?y các siêu d? li?u t? Excel b?ng cách s? d?ng phương pháp GetOleDbSchemaTable trong Visual Basic.NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 318373 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t t?ng bư?c này mô t? cách đ? l?y các b?ng và siêu d? li?u c?t t? Microsoft Excel ngu?n d? li?u b?ng cách s? d?ng các GetOleDbSchemaTable phương pháp c?a Microsoft OLE DB nhà cung qu?n l? c?p và các Microsoft OLE DB nhà cung c?p cho máy bay ph?n l?c.

Các GetOleDbSchemaTable phương pháp đư?c ti?p xúc do các System.Data.OleDb l?p h?c c?a Microsoft.NET Framework là các.NET k? ti?p c?a các OpenSchema phương pháp trong phiên b?n trư?c c?a Microsoft ActiveX Data Objects (ADO).

Mô t? k? thu?t

Sau khi b?n k?t n?i v?i m?t ngu?n d? li?u Excel b?ng cách s? d?ng ADO.NET, b?n gi?i nén m?t danh sách các siêu d? li?u b?ng b?ng cách s? d?ng GetOleDbSchemaTable, và sau đó s? d?ng phương pháp tương t? v?i đ?i s? khác nhau đ? có đư?c siêu d? li?u c?t b?ng đ? ch?n. B?n c?ng có th? s? d?ng m?t DataGridTableStyle đ?i tư?ng đ? lay ra và đ?nh d?ng truy v?n c?a b?n k?t qu? trong m?t d? li?u lư?i.

Yêu c?u

Danh sách sau v?ch ra đư?c đ? ngh? ph?n c?ng, ph?n m?m, h? t?ng m?ng, và gói d?ch v? c?n thi?t:
  • Visual Studio.NET đư?c cài đ?t trên m?t Microsoft tương thích H? đi?u hành Windows
  • Ít nh?t m?t Microsoft Excel b?ng tính (.xls) t?p tin v?i m?t s? hàng và c?t c?a d? li?u
Bài vi?t này gi? đ?nh r?ng b?n có ít cơ b?n quen v?i các ch? đ? sau:
  • Visual Basic.NET
  • ADO.Truy c?p d? li?u NET
  • Excel Workbook và worksheets

M?u

  1. B?t đ?u Microsoft Visual Studio.NET, và t?o ra m?t th? giác m?i Cơ b?n.D? án ?ng d?ng Windows NET.
  2. Thêm ba Nút đi?u khi?n và hai DataGrid đi?u khi?n m?c đ?nh m?u (Form1). Thay đ?i các Văn b?n tài s?n c?a các Nút đi?u khi?n đ? L?y các siêu d? li?u, Đ?nh d?ng b?ng danh sách, và Đ?nh d?ng c?t List tương ?ng.
  3. Chuy?n đ?i sang các h?nh th?c m? mô-đun, và thêm dư?i đây Nh?p kh?u cáo ? đ?u trang:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Chèn các t? khai mô-đun c?p sau đây trong các H?nh th?c l?p h?c sau khi d?ng "th?a hư?ng System.Windows.Forms.Form". Đi?u ch?nh chu?i k?t n?i khi c?n thi?t đ? tr? đ?n m?t b?ng tính Excel t?p tin đó có m?t s? hàng và c?t c?a d? li?u.
        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. Chèn đo?n m? sau trong các H?nh th?c l?p h?c sau vùng "Windows m?u thi?t k? t?o ra m?". M? này g?i GetOleDbSchemaTable đ? t?i b?ng và c?t danh sách, populates các DataGrid đi?u khi?n, và c?p nh?t các c?t danh sách khi b?ng đ? ch?n thay đ?i.
        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. Chèn thêm m? sau đây đ? lay ra và đ?nh d?ng các b?ng DataGrid b?ng cách s? d?ng TableStyles. Lưu ? vi?c s? d?ng PropertyDescriptor đ? t?o đi?u ki?n không m?c đ?nh đ?nh d?ng c?t ngày.
        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. Chèn thêm m? sau đây đ? lay ra và đ?nh d?ng các c?tDataGrid b?ng cách s? d?ng 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. Ch?y các d? án.
  9. Nh?p vào L?y các siêu d? li?u đ? đi?n vào các Bảng danh sách (DataGrid1) v?i t?t c? các c?t c?a thông tin đư?c tr? l?i cho m?i b?ng trong b?ng tính Excel b?i GetOleDbSchemaTable. Các C?t danh sách (DataGrid2) đư?c làm đ?y cùng m?t lúc v?i t?t c? các c?t c?a thông tin đó đư?c tr? v? cho các c?t trong b?ng đ?u tiên trong các Bảng danh sách.
  10. Ch?n m?t b?ng khác nhau trong các Bảng danh sách. Các C?t danh sách thay đ?i đ? hi?n th? các c?t t? b?ng đ? ch?n v? các cm_PositionChanged x? l? s? ki?n mà b?n th?c hi?n.
  11. Nh?p vào Đ?nh d?ng b?ng danh sách đ? xác đ?nh và áp d?ng m?t TableMappingStyle đ? DataGrid1. Đi?u này làm cho tiêu đ? c?t "thân thi?n" hơn và hi?n th? ch? b?n c?t c?a h?u ích d? li?u t? chín c?t đó đư?c tr? v? b?i GetOleDbSchemaTable. Các c?t đư?c hi?n th?:
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    Nh?ng kho?ng tr?ng c?t không đư?c hi?n th?:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    MÔ T?
    TABLE_PROPID
  12. Nh?p vào Đ?nh d?ng c?t List đ? xác đ?nh và áp d?ng m?t TableMappingStyle đ? DataGrid2. Đi?u này làm cho các tiêu đ? c?t "thân thi?n" hơn và hi?n th? ch? là 5 h?u ích nh?t c?t c?a d? li?u t? 28 c?t đó đư?c tr? v? b?i GetOleDbSchemaTable.
    COLUMN_NAME
    ORDINAL_POSITION
    DATA_TYPE
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    Các c?t ch? y?u tr?ng không đư?c hi?n th?:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_NAME (đ? bi?t)
    COLUMN_GUID
    COLUMN_PROPID
    COLUMN_HASDEFAULT (luôn luôn gi?)
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (luôn luôn đúng)
    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
    DOMAIN_NAME
    MÔ T?
  13. Nh?p vào m?t hàng khác nhau trong DataGrid1 đ? ch?n m?t khác nhau b?ng. Các C?t danh sách đư?c c?p nh?t t? đ?ng. Các TableStyles r?ng b?n trư?c đây áp d?ng cho m?i DataGrid v?n có hi?u l?c.

Khắc phục sự cố

  • Các lo?i d? li?u c?t đó đư?c tr? v? b?i GetOleDbSchemaTable cho m?t ngu?n d? li?u Excel là không gi?ng nhau trong m?i trư?ng h?p đ? các lo?i d? li?u đó đư?c tr? v? b?i các OpenSchema phương pháp trong c? đi?n ADO:
    Thu g?n b?ng nàyBung r?ng b?ng này
    C?t ki?uC? đi?n ADOADO.NET (OLE DB)
    S?5 - adDouble5- OleDbType.Double
    Ti?n t?6 - adCurrency6- OleDbType.Currency
    Ngày/th?i gian7 - adDate7- OleDbType.Date
    Boolean11 - adBoolean11- OleDbType.Boolean
    Văn b?n<>202 - adVarWChar130- OleDbType.WChar
    B?n ghi nh?203 - adLongVarWChar130- OleDbType.WChar
  • GetOleDbSchemaTable, như OpenSchema, tr? v? m?t c?t duy nh?t "F1" t? m?t b?ng tính Excel có s?n ph?m nào, M?c dù trong th?c t? không có d? li?u ho?c c?t đ? m?c đang có hi?n nay.

THAM KH?O

Cho thông tin b? sung, b?m s? bài vi?t sau đây đ? xem bài vi?t trong Microsoft Knowledge Base:
257819HOWTO: S? d?ng ADO v?i d? li?u Excel t? Visual Basic ho?c VBA

Thu?c tính

ID c?a bài: 318373 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
T? khóa: 
kbhowtomaster kbprovider kbmt KB318373 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:318373

Cung cấp Phản hồi

 

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