Postupy: Načíst Metadata z aplikace Excel v aplikaci Visual Basic .NET pomocí metody GetOleDbSchemaTable

Překlady článku Překlady článku
ID článku: 318373 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek popisuje načíst metadata tabulky a sloupce z uzavřený zdrojů dat pomocí metody GetOleDbSchemaTable s Microsoft OLE DB spravované Provider a Microsoft OLE DB Provider pro stroj Jet.

Metoda GetOleDbSchemaTable je vystavena třídou System.data.OLEDB Microsoft .NET Framework je následník .NET metody OpenSchema v dřívějších verzích Microsoft ActiveX Data Objects (ADO).

Popis Technique

Po připojení k zdroje dat aplikace Excel pomocí ADO.NET pomocí GetOleDbSchemaTable extrahovat seznamu metadata tabulky a pak použít stejnou metodu různé argumenty získat metadata sloupec pro vybranou tabulku. Můžete také použít Styl DataGridTableStyle objekt rozložení a formátování výsledků dotazu v mřížce data.

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 nainstalován kompatibilní operační systém Microsoft Windows
  • Alespoň jeden soubor Microsoft Excel (XLS) s některé řádky a sloupce dat
Tento článek předpokládá, že máte alespoň základní znalost následující témata:
  • Visual Basic .NET
  • Přístup k datům ADO.NET
  • Sešity aplikace Excel a listů

UKÁZKA

  1. Spusťte Microsoft Visual Studio .NET a vytvořit nový projekt aplikace Visual Basic .NET Windows.
  2. Přidat ovládací prvky tři tlačítka a dva ovládací prvky DataGrid výchozí formulář (Form1). Vlastnost text prvků tlačítka změnit respektive na Načíst Metadata, Seznamu formát tabulky a Formát sloupce seznamu.
  3. Přepněte do modulu kódu formuláře a přidat následující příkazy Imports horní:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Vložte následující deklarace úroveň modulu třídy formuláře po "System.Windows.Forms.Form dědí" řádek. Upravte připojovací řetězec podle potřeby přejděte souboru sešitu aplikace Excel, který obsahuje některé řádky a sloupce dat.
        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 v třídě Form po oblasti "Kód generovaný Windows Form Designer". Tento kód volá GetOleDbSchemaTable načíst seznamy tabulky a sloupce, naplní se ovládací prvky DataGrid a aktualizuje seznam sloupců při změně 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. Poznámka: použití DataGridColumn usnadňují-výchozí formátování sloupců 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 rozložení a formátování sloupce 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. Spustit projektu.
  9. Klepněte na tlačítko Načíst Metadata vyplnění seznamu (DataGrid1) tabulky s všechny sloupce informace pro každou tabulku v sešitu aplikace Excel vrácených GetOleDbSchemaTable. Seznamu sloupce (DataGrid2) je vyplněna současně s všechny sloupce informace, které jsou vráceny pro sloupce v první tabulce v seznamu tabulky.
  10. Vyberte jinou tabulku v seznamu tabulky. Změny seznamu sloupce zobrazení sloupců z vybrané tabulky kvůli cm_PositionChanged obslužnou rutinu události, která je implementována.
  11. Klepněte na tlačítko Formát tabulky seznam definovat a použít TableMappingStyle DataGrid1. To umožňuje více "popisný" záhlaví sloupců a zobrazí pouze čtyři sloupce užitečná data z devíti sloupců, které jsou vráceny GetOleDbSchemaTable. Jsou zobrazeny tyto sloupce:
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    Tyto prázdné sloupce nejsou zobrazeny:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    POPIS
    TABLE_PROPID
  12. Klepněte na tlačítko Formát sloupce seznamu definovat a použít TableMappingStyle DataGrid2. 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 GetOleDbSchemaTable.
    NÁZEV_SLOUPCE
    ORDINAL_POSITION
    DATA_TYPE
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    Tyto většinou 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
    název_domény
    POPIS
  13. Klepnutím na jiný řádek DataGrid1 vyberte jinou tabulku. Seznamu sloupce automaticky aktualizovány. TableStyles dříve použili každý DataGrid zůstávají v platnosti.

Odstraňování potíží

  • Typy dat sloupců, které vrácené GetOleDbSchemaTable pro zdroje dat aplikace Excel nejsou shodné ve všech případech typy dat vrácených metoda OpenSchema v klasické ADO:
    Zmenšit tuto tabulkuRozšířit tuto tabulku
    Typ sloupceKlasické ADOADO.NET (OLE DB)
    Numerické5 adDouble5 OleDbType.Double
    Měny6 adCurrency6 OleDbType.Currency
    Datum a čas7 adDate7 OleDbType.Date
    Logická hodnota11 adBoolean11 OleDbType.Boolean
    Text < 255202 adVarWChar130 OleDbType.WChar
    Memo203 adLongVarWChar130 OleDbType.WChar
  • GetOleDbSchemaTable jako OpenSchema vrátí jediný sloupec "F1" z prázdného listu aplikace Excel, přestože ve skutečnosti jsou k dispozici žádná data nebo sloupec záhlaví.

Odkazy

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
257819Postupy: Použití ADO s Excel Data z jazyka nebo VBA

Vlastnosti

ID článku: 318373 - Poslední aktualizace: 3. září 2003 - Revize: 2.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
  • Microsoft ADO.NET 1.0
Klíčová slova: 
kbmt kbhowtomaster kbprovider KB318373 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:318373

Dejte nám zpětnou vazbu

 

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