JAK: Načíst Metadata z aplikace Excel pomocí Metoda GetOleDbSchemaTable metoda v jazyce Visual Basic .NET

Microsoft Visual C# .NET verzi tohoto článku naleznete v tématu
318452 .

Souhrn

Tento podrobný článek popisuje, jak načíst metadata tabulky a sloupců ze zdroje dat aplikace Microsoft Excel pomocí Metoda GetOleDbSchemaTable metoda zprostředkovatele Microsoft OLE DB spravované a Microsoft OLE DB Provider pro stroj Jet.

Metoda GetOleDbSchemaTable metoda, která je vystavena podle System.Data.OleDb třídy Microsoft rozhraní.NET Framework je nástupcem .NET metodu OpenSchema v dřívější verze Microsoft ActiveX Data Objects (ADO).

Popis techniky

Po připojení ke zdroji dat aplikace Excel pomocí ADO.NET extrahovat seznam metadat tabulky pomocí Metoda GetOleDbSchemaTablea potom pomocí stejné metody s různými argumenty získat metadata sloupce vybrané tabulky. Styl DataGridTableStyle objektu můžete použít také k rozložení a formátování mřížky dat ve výsledcích dotazu.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack, které budete potřebovat:
  • Visual Studio .NET do kompatibilní operačního systému Microsoft Windows nainstalována
  • Nejméně jeden soubor aplikace Microsoft Excel (XLS) s některými řádky a sloupce dat
Tento článek předpokládá, že máte alespoň základní znalost následujících témat:
  • Visual Basic .NET
  • Přístup k datům technologie ADO.NET
  • Aplikace Excel sešitů a listů

Ukázka

  1. Microsoft Visual Studio .NET spusťte a vytvořit nový projekt aplikace Windows Visual Basic .NET.
  2. Přidáte tři ovládací prvky tlačítko a dva ovládací prvky DataGrid na výchozí formulář (Form1). Změňte vlastnost Text tlačítka Načíst Metadata Seznamu formát tabulkya Sloupce seznamu Formát .
  3. Přepněte do modulu kódu formuláře a přidejte následující dovoz příkazy v horní:
    Imports System.DataImports System.Data.OleDb
    Imports System.ComponentModel
  4. Vložte následující prohlášení na úrovni modulu třídy formuláře "Formuláře System.Windows.Forms.Form dědí" řádku. Upravte řetězec připojení podle potřeby přejděte na soubor sešitu aplikace Excel obsahuje některé řádky a sloupce s daty.
        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. Vložte následující kód po oblasti "Windows Form Designer s vygenerovaným kódem" do třídy formuláře . Tento kód volá Metoda GetOleDbSchemaTable načíst seznamy tabulek a sloupců, naplní ovládací prvky DataGrid a aktualizuje seznam sloupců při vybrané tabulky.
        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. Vložte následující kód do rozložení a formátování tabulky DataGrid pomocí TableStyles. Všimněte si použití PropertyDescriptor pro usnadnění, jiné než výchozí formátování sloupce datum.
        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. Vložte následující kód v rozložení a formátování sloupce
    Ovládací prvek DataGrid pomocí 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. Spuštění projektu.
  9. Všechny sloupce s informacemi, které jsou vráceny pro každou tabulku v sešitu aplikace Excel pomocí Metoda GetOleDbSchemaTableklepněte na tlačítko Načíst Metadata k vyplnění seznamu tabulek (DataGrid1). Seznam sloupců (DataGrid2) je vyplněn současně všechny sloupce s informacemi, které jsou vráceny sloupců z první tabulky v seznamu tabulky .
  10. V seznamu tabulky vyberte jinou tabulku. Změny seznamu sloupce k zobrazení sloupců z vybrané tabulky z obslužné rutiny události cm_PositionChanged , která je implementována.
  11. Klepněte na Formát seznamu tabulek definovat a použít TableMappingStyle DataGrid1. To umožňuje více "popisný" záhlaví sloupců a zobrazí čtyři sloupce užitečná data z devíti sloupců, které jsou vráceny pomocí Metoda GetOleDbSchemaTable. Tyto sloupce se zobrazí:
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    Tyto sloupce prázdné znaky nejsou zobrazeny:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    POPIS
    TABLE_PROPID
  12. Klepněte na Seznam formát sloupců definovat a použít DataGrid2 TableMappingStyle. To umožňuje více "popisný" záhlaví sloupců a zobrazí pouze 5 nejužitečnější sloupce dat z 28 sloupce, které jsou vráceny pomocí Metoda GetOleDbSchemaTable.
    COLUMN_NAME
    ORDINAL_POSITION
    DATA_TYPE
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    Tyto převážně prázdné sloupce nejsou zobrazeny:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_NAME (již známé)
    COLUMN_GUID
    COLUMN_PROPID
    COLUMN_HASDEFAULT (vždy false)
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (vždy 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
    DOMAIN_NAME
    POPIS
  13. Klepněte na jiný řádek v DataGrid1 vyberte jinou tabulku. Seznam sloupců je automaticky aktualizován. TableStyles, které byly použity pro každý ovládací prvek DataGrid zůstávají v platnosti.

Poradce při potížích

  • Nejsou ve všech případech shodné s typy dat, které jsou vráceny pomocí metody OpenSchema v klasické ADO datové typy sloupců, které jsou vráceny pomocí Metoda GetOleDbSchemaTable pro zdroj dat aplikace Excel:
    Typ sloupceKlasické ADOADO.NET (OLE DB)
    Numerické5 - adDouble5 - OleDbType.Double
    Měna6 - adCurrency6 - OleDbType.Currency
    Date/Time7 - adDate7 - OleDbType.Date
    Logická hodnota11 - adBoolean11 - OleDbType.Boolean
    Text < 255202 - adVarWChar130 - OleDbType.WChar
    Penále203 - adLongVarWChar130 - OleDbType.WChar
  • Metoda GetOleDbSchemaTablejako OpenSchemavrátí jeden sloupec "F1" prázdný list aplikace Excel, přestože ve skutečnosti jsou přítomny žádné hlavičky dat nebo sloupce.

Odkazy

Další informace získáte kliknutím na následující číslo v článku databáze Microsoft Knowledge Base:
257819 postupy: použití objektů ADO s daty aplikace Excel z aplikace Visual Basic nebo VBA
Vlastnosti

ID článku: 318373 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor