AKO: Načítať metaúdajov z programu Excel pomocou metódy GetOleDbSchemaTable v jazyku Visual Basic.NET

Preklady článku Preklady článku
ID článku: 318373 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Tento článok obsahuje krokový postup na načítanie tabuľky a stĺpec metaúdajov z zdroje údajov programu Microsoft Excel pomocou GetOleDbSchemaTable metóda s poskytovateľa Microsoft OLE DB riadené a Microsoft OLE DB Provider for Jet.

The GetOleDbSchemaTable spôsob, ktorý poskytuje System.Data.OleDb Trieda Microsoft.NET Framework je.ČISTÝ nástupcom OpenSchema metóda v starších verziách programu Microsoft ActiveX Data Objects (ADO).

Popis technika

Po pripojení na zdroj údajov programu Excel pomocou ADO.NET, môžete Pomocou Extrahujte zoznam tabuľky metadáta GetOleDbSchemaTable, a potom použiť rovnakú metódu s rôzne argumenty na získanie stĺpec metaúdaje pre vybranú tabuľku. Môžete tiež použiť DataGridTableStyle objekt na rozloženie a formát váš dotaz výsledky údaje Mriežka.

Požiadavky

Nasledujúci zoznam popisuje odporúčané hardware, software, sieťovú infraštruktúru a balíky service pack, ktoré budete potrebovať:
  • Visual Studio.NET nainštalovaný kompatibilný Microsoft Operačný systém Windows
  • Aspoň jeden súbor zošita (súbor .xls) programu Microsoft Excel s niektorými riadky a stĺpce údajov
Tento článok predpokladá, že máte aspoň základné znalosti s v nasledovných témach:
  • Jazyka Visual Basic.NET
  • ADO.ČISTÁ k údajom
  • Zošity programu Excel a pracovných hárkov

Vzorky

  1. Spustiť Microsoft Visual Studio.NET a vytvoriť nové Visual Základné.NET Windows aplikácie projektu.
  2. Pridajte tri Tlačidlo ovládacích prvkov a dve Údajová mriežka Ovládacie prvky na predvolený formulár (Form1). Zmena Textu Vlastnosť Tlačidlo Ovládacie prvky Načítať metadáta, Formát tabuliek zoznam, a Formátovať stĺpce zoznamu posúvacie tla?idlá.
  3. Prepnite sa do formulára kód modulu a pridať nasledujúce Dovozy vyhlásenia na vrchole:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Vložiť nasledujúce vyhlásenia modul-úrovni v Formulár Trieda po riadku "Zdedí System.Windows.Forms.Form". Upraviť reťazec pripojenia tak, aby ukážte na zošit programu Excel súborov, ktoré obsahuje niektoré riadky a stĺpce údajov.
        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 nasledujúci kód v Formulár Trieda po "Windows návrhár formulára generované kód" región. Tento kód vyzýva GetOleDbSchemaTable načítať tabuľky a stĺpce zoznamov, zaplní Údajová mriežka kontroly a aktualizácie stĺpce zoznamu, keď vybratou tabuľkou zmeny.
        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 nasledujúci kód na rozloženie a formát tabuľky Údajová mriežka pomocou TableStyles. Všimnite si použitie PropertyDescriptor na uľahčenie nie sú predvolené formátovanie stĺpcov, dátum.
        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 nasledujúci kód na rozloženie a naformátujte stĺpceÚdajová mriežka pomocou 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. Spustenie projektu.
  9. Kliknite na tlačidlo Načítať metadáta na vyplnenie Tabuľky zoznam (DataGrid1) so všetkými stĺpce s informáciami, ktoré sú vrátené pre každú tabuľku v zošite programu Excel Autor GetOleDbSchemaTable. The Stĺpce zoznam (DataGrid2) sa naplní súčasne so všetkými stĺpce s informáciami, ktoré vrátia pre stĺpce v prvej tabuľke v The Tabuľky zoznam.
  10. Vyberte iný tabuľka v Tabuľky zoznam. The Stĺpce zoznam zmien zobraziť stĺpce z vybraných tabuľky z dôvodu cm_PositionChanged obsluhy udalostí, ktoré môžete implementovať.
  11. Kliknite na tlačidlo Formát tabuliek zoznam definovať a uplatňovať TableMappingStyle na DataGrid1. To robí hlavičky stĺpcov viac "priateľské" a zobrazí iba štyri stĺpce užitočné údaje z deviatich stĺpce, ktoré vrátia GetOleDbSchemaTable. V týchto stĺpcoch sa zobrazujú:
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    Tieto prázdne stĺpce nie sú zobrazené:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    POPIS
    TABLE_PROPID
  12. Kliknite na tlačidlo Formátovať stĺpce zoznamu definovať a uplatňovať TableMappingStyle na DataGrid2. Toto robí hlavičky stĺpcov viac "priateľské" a zobrazí iba 5 najužitočnejšie stĺpce údajov z 28 stĺpcov, ktoré vrátia GetOleDbSchemaTable.
    COLUMN_NAME
    ORDINAL_POSITION
    DATA_TYPE
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    Tieto väčšinou prázdne stĺpce nie sú zobrazené:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_NAME (už známy)
    COLUMN_GUID
    COLUMN_PROPID
    COLUMN_HASDEFAULT (vždy false)
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (vždy pravda)
    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
    NÁZOV_DOMÉNY.
    POPIS
  13. Kliknutím na iný riadok v DataGrid1 vyberte iný Tabuľka. The Stĺpce zoznam sa automaticky aktualizuje. TableStyles že ste predtým uplatňované na každú Údajová mriežka zostávajú v platnosti.

Riešenie problémov

  • Typy stĺpcov údajov, ktoré vrátia GetOleDbSchemaTable zdroja údajov programu Excel nie sú identické vo všetkých prípadoch typy údajov, ktoré vrátia OpenSchema metóda v klasické ADO:
    Zbaliť túto tabuľkuRozbaliť túto tabuľku
    Typ stĺpcaKlasické ADOADO.NET (OLE DB)
    Numerickej5 - adDouble5- OleDbType.Double
    Meny6 - adCurrency6- OleDbType.Currency
    Dátum a čas7 - adDate7- OleDbType.Date
    Boolovská hodnota11 - adBoolean11- OleDbType.Boolean
    Textu<>202 - adVarWChar130- OleDbType.WChar
    Penále203 - adLongVarWChar130- OleDbType.WChar
  • GetOleDbSchemaTable, ako OpenSchema, vráti jeden stĺpec "F1" prázdnom pracovnom hárku programu Excel, Hoci v skutočnosti žiadne údaje alebo stĺpci položky sú prítomné.

ODKAZY

Pre Ďalšie informácie zobrazíte kliknutím na nasledujúce číslo článku zobrazte článok v databáze Microsoft Knowledge Base:
257819HOWTO: Použite ADO s údajmi programu Excel z programu Visual Basic alebo VBA

Vlastnosti

ID článku: 318373 - Posledná kontrola: 8. novembra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
Kľúčové slová: 
kbhowtomaster kbprovider kbmt KB318373 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:318373

Odošlite odozvu

 

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