Teď jste offline a čekáte, až se znova připojí internet.

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

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
Microsoft Visual C# .NET verzi tohoto článku naleznete 318452.

Obsah úlohy

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).

back to the top

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.

back to the top

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ů
back to the top

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.DataImports System.Data.OleDbImports 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.
back to the top

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:
    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í.
back to the top
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
back to the top

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 318373 - Poslední kontrola: 09/03/2003 22:57:40 - Revize: 2.1

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft ADO.NET 1.1, Microsoft ADO.NET 1.0

  • kbmt kbhowtomaster kbprovider KB318373 KbMtcs
Váš názor
0&did=1&t=">:none;" onerror="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">
Paraguay - Español
Venezuela - Español
did=1&t=">0&did=1&t=">id=1&t=">pt" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" did=1&t=">window.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");