Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

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

Ö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
Bu makalenin Microsoft Visual C# .NET sürümü için bkz: 318452.

Bu görevde

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

back to the top

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.

back to the top

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

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

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

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 318373 - Son İnceleme: 09/03/2003 22:57:40 - Düzeltme: 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 KbMttr
Geri bildirim