ПРАКТИЧЕСКОЕ руководство: Получить метаданные из Microsoft Excel с помощью метода GetOleDbSchemaTable в Visual Basic.NET

Переводы статьи Переводы статьи
Код статьи: 318373 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается, как получить таблицу и метаданных из источников данных Microsoft Excel с помощью GetOleDbSchemaTable метод с помощью поставщика Microsoft OLE DB управляемых и Поставщик Microsoft OLE DB для Jet.

В GetOleDbSchemaTable метод, предоставленный System.Data.OleDb класс корпорации Майкрософт.NET Framework является.NET преемником OpenSchema в более ранних версиях Microsoft ActiveX Data Objects метод (ADO).

Описание приема

После подключения к источнику данных Excel с помощью ADO.NET, то Извлечение списка таблиц метаданных с помощью GetOleDbSchemaTable, а затем с помощью того же метода с различными аргументами для получения метаданные столбца для выбранной таблицы. Можно также использовать DataGridTableStyle объект для размещения и форматирования запроса приводит к данным Сетка.

Требования

В следующем списке представлены рекомендуемого оборудования, программного обеспечения, сетевой инфраструктуры и пакетов обновления, которые необходимо будет:
  • Visual Studio.NET, установленной на совместимый корпорации Майкрософт Операционная система Windows
  • По крайней мере один файл Microsoft Excel книгу (xls), с некоторыми строки и столбцы данных
В данной статье предполагается, что по крайней мере основные навыки работы в следующих областях:
  • Visual Basic.NET
  • ADO.Доступ к данным NET
  • Книги и листы Excel

Образец

  1. Запустите Microsoft Visual Studio.NET и создать новый Основные.Проект приложения Windows NET.
  2. Добавьте три Кнопка элементы управления и два DataGrid элементы управления в форме по умолчанию (Form1). Изменение Текст свойства элемента Кнопка элементы управления Получение метаданных, Формат списка таблиц, и Формат столбцов списка соответственно.
  3. Переключитесь в модуль кода формы и добавьте следующие строки Импортируемые пространства имен операторы в верхней.
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Вставьте следующие объявления на уровне модуля в Форма класс после строки «Наследует System.Windows.Forms.Form». Настройка Строка подключения, при необходимости на книгу Microsoft 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 Forms созданный код». Этот код вызывает GetOleDbSchemaTable для загрузки, таблицы и столбцы списка заполняет DataGrid элементы управления и обновления, когда заполнено перечислить столбцы выбранной таблицы изменения.
        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. Обратите внимание на использование Дескриптор свойства для облегчения нестандартное форматирование столбцов даты.
        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. Это делает заголовки столбцов более «понятное» и отображает только четыре столбца из полезных данные из девяти столбцы, возвращаемые 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
    Не отображаются в основном пустые столбцы:
    TABLE_CATALOG
    TABLE_SCHEMA
    Table_name (уже известно)
    COLUMN_GUID
    COLUMN_PROPID
    COLUMN_HASDEFAULT (всегда false)
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (всегда имеет значение true)
    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 для источника данных Microsoft Excel не являются идентичными во всех случаях для типы данных, которые возвращаются свойством OpenSchema метод в классическом ADO:
    Свернуть эту таблицуРазвернуть эту таблицу
    Тип столбцаКлассический ADOADO.NET (OLE DB)
    Цифровой5 - adDouble5- OleDbType.Double
    Валюта6 - adCurrency6- OleDbType.Currency
    Дата и время7 - adDate7- OleDbType.Date
    Логическое значение11 - adBoolean11- OleDbType.Boolean
    Текст<>202 - adVarWChar130- OleDbType.WChar
    Ноты203 - adLongVarWChar130- OleDbType.WChar
  • GetOleDbSchemaTable, таких как OpenSchema, возвращает один столбец «f1» из пустого листа Excel Несмотря на то, что на самом деле нет никаких данных заголовки.

Ссылки

Для Дополнительные сведения, щелкните следующий номер статьи в Microsoft Knowledge Base:
257819Использование ADO с данными Excel из Visual Basic или VBA

Свойства

Код статьи: 318373 - Последний отзыв: 7 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
Ключевые слова: 
kbhowtomaster kbprovider kbmt KB318373 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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