NASıL YAPıLıR: Visual Basic. NET'te GetOleDbSchemaTable yöntemi'ni kullanarak meta veriler Excel'den Al

Makale numarası: 318373 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, Microsoft OLE DB yönetilen sağlayıcı ve Microsoft OLE DB sağlayıcısı için Jet GetOleDbSchemaTable yöntemini kullanarak, Microsoft Excel veri kaynaklarından tablo ve sütun meta verileri almak açıklamaktadır.

Kullanıma GetOleDbSchemaTable tarafından System.Data.OLEDB sınıfı Microsoft .NET Framework'ün önceki sürümlerinde bir Microsoft ActiveX Data Objects OpenSchema yöntemi .NET ardıl yöntemdir (ADO).

Tekniğin Açıklaması

ADO.NET kullanarak bir Excel veri kaynağına bağlandıktan sonra GetOleDbSchemaTable kullanarak tablo meta verileri listesini ayıklar ve sonra seçili tablo için sütun meta verileri almak için farklı bağımsız değişkenlerle aynı yöntemi kullanın. DataGridTableStyle bir nesneyi düzenlemek ve bir <a0>Veri</a0> kılavuzunda, sorgu sonuçlarını biçimlendirmek için de kullanılabilir.

Gereksinimler

Aşağıdaki listede önerilen donanım, yazılım, ağ altyapısı ve gereken hizmet paketleri önerilmektedir:
  • Uyumlu bir Microsoft Windows işletim sistemi üzerinde yüklü Visual Studio .NET
  • Bazı satır ve sütun veri en az bir Microsoft Excel çalışma kitabı (.xls) dosyası
Bu makalede aşağıdaki konular ile en az bir temel benzerlik olduğunuz varsayılmaktadır:
  • Visual Basic .NET
  • ADO.NET veri erişimi
  • Excel çalışma kitapları ve çalışma sayfaları

ÖRNEK

  1. Microsoft Visual Studio. NET'i başlatın ve yeni bir Visual Basic .NET Windows uygulaması) projesi oluşturun.
  2. Üç Düğme denetimi ve iki DataGrid denetimi (Form1) varsayılan forma ekleyin. Düğme denetimlerin metin özelliği Meta veri almak, Biçim tabloları listesi ve Biçim sütunlar listesi sırasıyla değiştirin.
  3. Form kodu modüle geçin ve aşağıdaki ımports en üstüne ekleyin:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Aşağıdaki Modül düzeyinde bildirimleri form sınıfında "Devralan System.Windows.Forms.Form" satırdan sonra ekleyin. Bazı satır ve sütun veri içeren bir Excel çalışma kitabı dosyasına işaret etmek gerekirse, bağlantı dizesini ayarlayın.
        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. Aşağıdaki kod <a2>form</a2> sınıfının sonra "Windows Form Designer generated" bölge ekleme. Bu kod, tablo ve sütunlar listesi yüklenemedi GetOleDbSchemaTable çağırır, DataGrid denetimi doldurur ve Seçili tabloyu değiştiğinde sütunları listeyi güncelleştirir.
        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. Düzenlemek ve tablolar DataGridTableStyles kullanarak biçimlendirmek için aşağıdaki kodu ekleyin. Tarih sütunlarının varsayılan olmayan biçimlendirmeleri kolaylaştırmak için PropertyDescriptor kullanımına dikkat edin.
        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. Düzenlemek ve sütunlarda biçimlendirmek için aşağıdaki kodu ekleyin TableStyle kullanarak DataGrid:
        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. Projeyi çalıştırın.
  9. Tüm sütunların Excel çalışma kitabındaki her tablo için GetOleDbSchemaTable tarafından döndürülen bilgileri (DataGrid1) Tablolar listesini doldurmak için Meta veri al ' ı tıklatın. Sütunlar listesinde (DataGrid2) aynı anda tüm sütunların döndürülen bilgi için <a0>Tablolar</a0> listesinde ilk tablodaki sütunları girilir.
  10. Farklı bir tablo, Tablolar listesinden seçin. Seçili tablo sütunlarından nedeniyle, uygulanan cm_PositionChanged olay işleyicisi görüntülemek için sütun listesi değişiklikleri.
  11. Biçim tabloları listesi tanımlamak ve DataGrid1 için bir TableMappingStyle uygulamak için Ek Yardım düğmesini tıklatın. Bu sütun başlıklarının daha "kolay" yapar ve yararlı veriler GetOleDbSchemaTable tarafından döndürülen dokuz sütunlarından yalnızca dört sütunları görüntüler. Bu sütunları görüntülenir:
    table_name
    table_type
    date_created
    date_modified
    Bu boşluklar sütunları görüntülenir:
    table_catalog
    table_schema
    table_guid
    Açıklama
    table_propid
  12. Biçim sütunlar listesi tanımlamak ve bir TableMappingStyle DataGrid2 için Ek Yardım düğmesini tıklatın. Bu sütun başlıklarının daha "kolay" sağlar ve yalnızca 5 en kullanışlı sütun 28 sütunlarından GetOleDbSchemaTable tarafından döndürülen verileri görüntüler.
    SÜTUN_ADI
    ordinal_position
    data_type
    maximum_character_length
    numeric_precision
    Bu genellikle boş sütunlar görüntülenir:
    table_catalog
    table_schema
    TABLE_NAME (zaten bilinen)
    column_guid
    column_propid
    COLUMN_HASDEFAULT (her zaman false)
    column_default
    column_flags
    IS_NULLABLE (her zaman doğru)
    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
    Etki_alanı_adı
    Açıklama
  13. Farklı bir satırdaki DataGrid1 farklı bir tablo seçmek için Ek Yardım düğmesini tıklatın. Sütunlar listesinde otomatik olarak güncelleştirilir. Her bir DataGrid için daha önce uyguladığınız TableStyles etkili olur.

SORUN GİDERME

  • Bir Excel veri kaynağını GetOleDbSchemaTable tarafından döndürülen sütun veri türleri her zaman Klasik ADO OpenSchema yöntemi tarafından döndürülen veri türleri için özdeş değil:
    Bu tabloyu kapaBu tabloyu aç
    Sütun türüKlasik ADOado.net (ole db)
    Sayısal5 adDouble5 OleDbType.Double
    Para birimi6 adCurrency6 OleDbType.Currency
    Date/Time7 adDate7 OleDbType.Date
    Mantıksal değer11 adBoolean11 OleDbType.Boolean
    Metin < 255202 adVarWChar130 OleDbType.WChar
    Kısa Not203 adLongVarWChar130 OleDbType.WChar
  • GetOleDbSchemaTable, OpenSchema gibi "F1" tek bir sütun boş bir Excel çalışma sayfasından, aslında hiçbir veri veya sütun başlıkları var olsa da verir.

Referanslar

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
257819Nasıl YAPıLıR: Excel verilerden Visual Basic'de veya VBA'DA ile ADO kullanma.

Özellikler

Makale numarası: 318373 - Son Gözden Geçirme: 03 Eylül 2003 Çarşamba - Gözden geçirme: 2.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
  • Microsoft ADO.NET 1.0
Anahtar Kelimeler: 
kbmt kbhowtomaster kbprovider KB318373 KbMttr
Otomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:318373

Geri Bildirim Ver