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
- Microsoft Visual Studio. NET'i başlatın ve yeni bir Visual Basic .NET Windows uygulaması) projesi oluşturun.
- Üç 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.
- 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
- 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 - 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 - 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 - 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 - Projeyi çalıştırın.
- 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.
- 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.
- 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
- 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
- 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 ADO | ado.net (ole db) |
|---|
| Sayısal | 5 adDouble | 5 OleDbType.Double |
| Para birimi | 6 adCurrency | 6 OleDbType.Currency |
| Date/Time | 7 adDate | 7 OleDbType.Date |
| Mantıksal değer | 11 adBoolean | 11 OleDbType.Boolean |
| Metin < 255 | 202 adVarWChar | 130 OleDbType.WChar |
| Kısa Not | 203 adLongVarWChar | 130 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.
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
257819
(http://support.microsoft.com/kb/257819/EN-US/
)
Nasıl YAPıLıR: Excel verilerden Visual Basic'de veya VBA'DA ile ADO kullanma.
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
| 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
(http://support.microsoft.com/kb/318373/en-us/
)