В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:318373
Для Microsoft Visual C#.NET версии статьи, см. 318452.

В ЭТОЙ ЗАДАЧЕ

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

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

back to the top

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

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

back to the top

Требования

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

Образец

  1. Запустите Microsoft Visual Studio.NET и создать новый Основные.Проект приложения Windows NET.
  2. Добавьте три Кнопка элементы управления и два DataGrid элементы управления в форме по умолчанию (Form1). Изменение Текст свойства элемента Кнопка элементы управления Получение метаданных, Формат списка таблиц, и Формат столбцов списка соответственно.
  3. Переключитесь в модуль кода формы и добавьте следующие строки Импортируемые пространства имен операторы в верхней.
    Imports System.DataImports System.Data.OleDbImports 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 остаются в силе.
back to the top

Устранение неполадок

  • Типы данных столбцов, возвращаемых службой 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 Несмотря на то, что на самом деле нет никаких данных заголовки.
back to the top
Ссылки
Для Дополнительные сведения, щелкните следующий номер статьи в Microsoft Knowledge Base:
257819Использование ADO с данными Excel из Visual Basic или VBA
back to the top

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 318373 — последний просмотр: 06/07/2011 12:05:00 — редакция: 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
Отзывы и предложения