Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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

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
Đối với một Microsoft Visual C#.NET Phiên bản này viết, xem 318452.

TRONG TÁC VỤ 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).

back to the top

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.

back to the top

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
back to the top

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.DataImports System.Data.OleDbImports 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.
back to the top

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:
    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.
back to the top
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
back to the top

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 318373 - Xem lại Lần cuối: 08/27/2011 19:06:00 - Bản sửa đổi: 2.0

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft ADO.NET 1.1

  • kbhowtomaster kbprovider kbmt KB318373 KbMtvi
Phản hồi