Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Gewusst wie: Abrufen von Metadaten aus Excel anhand der GetOleDbSchemaTable-Methode in Visual Basic .NET

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 318373
Eine Microsoft Visual c# .NET Version dieses Artikels finden Sie unter 318452.

Inhalt

Zusammenfassung
Dieser schrittweise aufgebaute Artikel beschreibt das Abrufen von Tabellen- und Spaltennamen Metadaten aus Microsoft Excel-Datenquellen mithilfe der GetOleDbSchemaTable -Methode mit dem Microsoft OLE DB Managed Provider und Microsoft OLE DB-Provider für Jet.

Die GetOleDbSchemaTable -Methode, verfügbar gemacht wird, durch die System.Data.OleDb -Klasse von Microsoft .NET Framework ist der Nachfolger .NET die OpenSchema- Methode in früheren Versionen von Microsoft ActiveX Data Objects (ADO).

back to the top

Beschreibung der Technik

Nachdem Sie mithilfe von ADO.NET eine Verbindung mit einer Excel-Datenquelle hergestellt, Sie eine Liste der Metadaten Tabelle mithilfe von GetOleDbSchemaTable extrahieren und verwenden dieselbe Methode mit verschiedenen Argumenten um Spaltenmetadaten für die ausgewählte Tabelle zu erhalten. Sie können auch ein DataGridTableStyle -Objekt verwenden, um Layout und die Abfrageergebnisse in einem Datenraster formatieren.

back to the top

Voraussetzungen

In der folgenden Liste sind die empfohlene Hardware, Software, Netzwerkinfrastruktur und erforderlichen Service Packs aufgeführt:
  • Visual Studio .NET auf einem kompatiblen Betriebssystem Microsoft Windows installiert
  • Mindestens eine Microsoft Excel-Arbeitsmappe (.xls)-Datei mit einigen Zeilen und Spalten von Daten
In diesem Artikel werden vorausgesetzt mindestens grundlegende Kenntnisse in den folgenden Themen:
  • Visual Basic .NET
  • ADO.NET-Datenzugriff
  • Excel-Arbeitsmappen und Arbeitsblätter
back to the top

Beispiel

  1. Starten Sie Microsoft Visual Studio .NET aus, und erstellen Sie ein neues Visual Basic .NET Windows-Anwendungsprojekt.
  2. Fügen Sie drei Button -Steuerelemente und zwei DataGrid -Steuerelemente in das das Standardformular (Form1). Ändern Sie die Text -Eigenschaft des Button -Steuerelemente bzw. Abrufen von Metadaten , Format Tabellenübers und Format Spalten List .
  3. Wechseln Sie zur Code-Modul des Formulars, und fügen Sie die folgenden Imports -Anweisungen oben:
    Imports System.DataImports System.Data.OleDbImports System.ComponentModel
  4. Legen Sie die folgenden Deklarationen auf Modulebene in der Form -Klasse nach der Zeile "Inherits System.Windows.Forms.Form". Passen Sie die Verbindungszeichenfolge wie erforderlich auf eine Excel-Arbeitsmappendatei, auf dem einige Zeilen und Spalten mit Daten enthält.
        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. Fügen Sie nach dem Bereich "Vom Windows Formulardesigner Generierter Code" folgenden Code in der Form -Klasse. Dieser Code ruft GetOleDbSchemaTable , die Tabelle und Spalten Listen zu laden, füllt die DataGrid -Steuerelementen und die Liste Spalten aktualisiert, wenn die ausgewählte Tabelle ändert.
        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. Fügen Sie den folgenden Code zum Layout und Formatieren von Tabellen, DataGrid mit Hilfe der TableStyles . Beachten Sie die Verwendung PropertyDescriptor zu erleichtern, vom Standard abweichende Formatierung des Date-Spalten.
        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. Fügen Sie folgenden Code zum gestalten und Formatieren der Spalten DataGrid mithilfe 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. Führen Sie das Projekt aus.
  9. Klicken Sie auf Metadaten abrufen der Liste die Tabellen (DataGrid1) ausfüllen aller Spalten mit Informationen, die für jede Tabelle in der Excel-Arbeitsmappe von GetOleDbSchemaTable zurückgegeben werden. Liste (DataGrid2) wird gleichzeitig mit allen Spalten mit Informationen, die zurückgegeben werden für die Spalten in der ersten Tabelle in der Liste Tabellen gefüllt.
  10. Wählen Sie eine andere Tabelle in der Liste Tabellen . Die Änderungen der Spalten Liste um die Spalten aus der ausgewählten Tabelle aufgrund des Ereignishandlers Cm_PositionChanged anzuzeigen, die Sie implementiert.
  11. Klicken Sie auf Format Tabellenübers definieren und Anwenden einer TableMappingStyle zu DataGrid1. Dies macht die Spaltenheader mehr "angezeigten" und zeigt nur die vier Spalten nützliche Daten aus den neun Spalten, die vom GetOleDbSchemaTable zurückgegeben werden. Diese Spalten werden angezeigt:
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    Diese leere Spalten werden nicht angezeigt:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    Beschreibung
    TABLE_PROPID
  12. Klicken Sie auf Format Spalten List definieren und ein TableMappingStyle, DataGrid2 zu übernehmen. Dies macht die Spaltenheader mehr "angezeigten" und zeigt nur die 5 nützlichsten Spalten von Daten aus den 28 Spalten, die vom GetOleDbSchemaTable zurückgegeben werden.
    COLUMN_NAME
    ORDINAL_POSITION
    DATA_TYPE
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    Diese größtenteils leeren Spalten werden nicht angezeigt:
    TABLE_CATALOG
    TABLE_SCHEMA
    Table_name (bereits bekannt)
    COLUMN_GUID
    COLUMN_PROPID
    COLUMN_HASDEFAULT (immer false)
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (immer 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
    Domänenname
    Beschreibung
  13. Klicken Sie auf eine andere Zeile in DataGrid1 eine andere Tabelle auswählen. Liste wird automatisch aktualisiert. TableStyles, die Sie zuvor jeder DataGrid zugewiesen bleiben wirksam.
back to the top

Problembehandlung

  • Die Spalte-Datentypen, die vom GetOleDbSchemaTable für eine Excel-Datenquelle zurückgegeben werden sind nicht mit den Datentypen, die von der OpenSchema -Methode im klassischen ADO zurückgegeben werden in allen Fällen identisch:
    SpaltentypKlassische ADOADO.NET (OLE DB)
    Numerische5 adDouble5 OleDbType.Double
    Währung6 adCurrency6-OleDbType.Currency
    Datum-Uhrzeit7 adDate7-OleDbType.Date
    Wert11 adBoolean11-OleDbType.Boolean
    Text < 255202 adVarWChar130-OleDbType.WChar
    Memo203 adLongVarWChar130-OleDbType.WChar
  • GetOleDbSchemaTable wie OpenSchema zurückgegeben eine einzelne Spalte "F1" aus ein leeres Excel-Arbeitsblatt, obwohl tatsächlich keine Daten oder Spaltenüberschriften vorhanden sind.
back to the top
Informationsquellen
Weitere Informationen finden Sie die folgende KB-Artikelnummer:
257819So wird 's gemacht: Verwenden von ADO mit Excel-Daten von Visual Basic oder VBA
back to the top

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 318373 – Letzte Überarbeitung: 09/03/2003 22:57:40 – Revision: 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 KbMtde
Feedback
nt('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?"> &t=">