Makale numarası: 309681 - Son Gözden Geçirme: 01 Temmuz 2004 Perşembe - Gözden geçirme: 3.4

Nasıl yapılır: GetOleDbSchemaTable ve Visual C# .NET kullanarak şema bilgilerini al

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu makalede, OleDbConnection nesnesinin GetOleDbSchemaTable yöntemi ADO.NET veritabanı şema bilgilerini almak için nasıl kullanılacağı gösterilmektedir. Şema bir veri kaynağında veritabanları veya veri kaynağı, tablolar ve görünümler bir veritabanında kullanılabilen kataloglarını yanı sıra, vb. bulunan kısıtlamalar bilgilerdir. Şema bilgileri bir tabloda birincil anahtar sütunları ve otomatik numara alanları içerir.

Bir SqlClient.SqlConnection nesne kullandığınızda, yöntem GetOleDbSchemaTable için eşdeğer olduğunu unutmayın. .NET Data Provider "SQL Server saklı yordamlar ve bilgilendirme görünümleri aracılığıyla arka uç şema bilgilerini gösterir. Görünümler ve Microsoft SQL Server'ı kullanılabilen saklı yordamlar hakkında daha fazla bilgi için MSDN Kitaplığı'nda Transact-SQL başvuru konusuna bakın.

Gereksinimler

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows Server veya Windows NT 4.0 Server 2000 Advanced
  • Microsoft Visual Studio. NET'i
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Visual Studio .NET
  • ADO.NET temelleri ve sözdizimi

GetOleDbSchemaTable OleDbConnection nesnesinin yöntemi

OLE DB .NET Data Provider, şema bilgileri göstermek için OleDbConnection nesnesinin GetOleDbSchemaTable yöntemini kullanır. GetOleDbSchemaTable şema bilgilerle doldurulan bir DataTable ' ı verir.

Ilk bağımsız değişken GetOleDbSchemaTable, şema parametresi, hangi şema bilgileri (tablolar, sütunlar ve birincil anahtarlar gibi) geri dönmek için tanımlayan OleDbSchemaGuid bağımsız değişken var. Ikinci bağımsız değişken bir nesne DataTable şemada döndürülen satırları süzmek için kısıtlamaları dizidir (örneğin, tablo adını, türünü, sahibi ve /or şema ile ilgili kısıtlamalar belirtebilir).

OleDbSchemaGuid üyeler

OleDbSchemaGuid bağımsız değişkeni, şema tablosu GetOleDbSchemaTable yöntemi türünü belirtir. OleDbSchemaGuid üyeleri bazıları şunlardır:
  • Sütunları
  • Yabancı anahtarlar
  • Dizinler
  • Birincil anahtarları
  • Tablolar
  • Görünümler
OleDbSchemaGuid üyeleri tam bir listesi için <a0>References</a0> bölümündeki "OleDbSchemaGuid üyeleri" Web sitesine bakın.

Sınırlamalar

Her biri için elde edilen DataTable, DataColumn karşılık gelen nesne süzgeç değerler dizisi, kısıtlamaları var. OleDbSchemaGuid bağımsız değişkeni ilgili kısıtlamalar belirler. OleDbSchemaGuid bir tablo belirttiğinizde, örneğin, dizi kısıtlamaları şöyledir:
{table_catalog, table_schema, table_name, table_type}
Kullanılabilir kısıtlamaları gözden geçirmek için aşağıdaki Microsoft Web sitesini OleDbSchemaGuid üyelerden birini tıklatın:
OleDbSchemaGuid üyeler
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp)
Kısıtlama dizideki değerler geçirdiğinizde, Visual C# .NET null anahtar için değerler içeren bir dizi öğelerini içerir. Örneğin, tablo şemaları almak istiyorsanız, bu OleDbSchemaGuid.Tables kullanın. Tablo seçeneğini belirlerseniz, ancak bu da diğer adlar, eşanlamlıları, görünümler ve ilgili diğer nesneleri döndürür. Bu nedenle, tablolar hariç tüm nesneleri süzmek istiyorsanız, bir TABLO kısıtlaması için TABLE_TYPE kullanın. Bu nesnelerde süzme nedeniyle, null TABLE_CATALOG TABLE_SCHEMA ve TABLE_NAME için kullanabilirsiniz:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
              new Object[] {null, null, null, "TABLE"});
				

Döndürülen DataTable

GetOleDbSchemaTable yöntemi döndürür DataTableOleDbSchemaGuid türü ve sınırlama ölçütünü karşılayan her nesne için bir satır vardır. DataTable, her ek şema bilgilerini OleDbSchemaGuid alanını temel alarak arkasından bir sınırlama sütun için sütun vardır.

Şu kodu kullanın, örneğin, her satırda bir DataTable döndürülen bir veritabanı tablosu olur:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
              new Object[] {null, null, null, "TABLE"});
				
TABLE_GUID, AÇıKLAMA TABLE_PROPID DATE_CREATED ve DATE_MODIFIED ek şema sütunlara göre gelir, sınırlama sütunların (TABLE_CATALOG TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE), DataTable ' döndürülen sütunlar şunlardır.

Bu sütun adları (diğer bir deyişle, alan tanımlayıcıları TABLE_CATALOG TABLE_SCHEMA ve TABLE_NAME gibi) listesini edinmek için <a0></a0>, sıralı konumunu sütunları kullanabilirsiniz. Sıfır tabanlı sütun dizi olduğunu unutmayın:
for (int i = 0; i < schemaTable.Columns.Count; i++) {
   Console.WriteLine(schemaTable.Columns[i].ToString());
}
				
her sütundaki (diğer bir deyişle gerçek tablo adları, kategoriler, müşteriler ve çalışanlar gibi) edinmek için <a0></a0>, satır sıralı konumunu ItemArray de kullanabilirsiniz. ItemArray sıfır tabanlı olduğunu unutmayın:
for (int i = 0; i < schemaTable.Rows.Count; i++) {
   Console.WriteLine(schemaTable.Rows[i].ItemArray[2].ToString());
}
				

Liste tabloları içeren bir örnek bir veritabanı oluşturun...

Aşağıdaki örnek, Northwind SQL Server tabloları listeler veritabanı.

OleDbSchemaGuid.Tables belirli bir oturum için erişilebilir bu tabloları (görünümler dahil olmak üzere) döndürür. {Null, boş, boş, "TABLE"} nesne dizisi belirtirseniz, yalnızca bir TABLE_TYPE, TABLO eklemek için filtre uygulayın. Sonra tabloyu listelediğiniz döndürülen şema tablosundaki her satırın (TABLE_NAME) adı.
  1. Visual Studio .NET'i başlatın.
  2. Yeni bir Visual C# konsol uygulaması) projesi oluşturun. Class1.cs, varsayılan olarak projeye eklenir.
  3. Kod penceresi için Class1 açın. Aşağıdaki kodu, Code penceresinin üstündeki ad alanı bildirimi yapıştırın:
    using System.Data;
    using System.Data.OleDb;
    					
  4. Kod penceresinde ana işlevi aşağıdaki kodu yapıştırın:
    OleDbConnection cn = new OleDbConnection();
    DataTable schemaTable;
    
    //Connect to the Northwind database in SQL Server.
    //Be sure to use an account that has permission to list tables.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=<username>;
                           Password=<strong password>;Initial Catalog=Northwind";
    cn.Open();
    
    //Retrieve schema information about tables.
    //Because tables include tables, views, and other objects,
    //restrict to just TABLE in the Object array of restrictions.
    schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
                  new Object[] {null, null, null, "TABLE"});
    
    //List the table name from each row in the schema table.
    for (int i = 0; i < schemaTable.Rows.Count; i++) {
       Console.WriteLine(schemaTable.Rows[i].ItemArray[2].ToString());
    }
    
    //Explicitly close - don't wait on garbage collection.
    cn.Close();
    
    //Pause
    Console.ReadLine();
    					
  5. SQL Server bilgisayarınızın Northwind veritabanındaki listede tablolar için izni olan bir hesap ile bağlanmak için ConnectionString değiştirin.
  6. Derlemek ve proje çalıştırmak için F5 tuşuna basın. Tablolar, konsol penceresinde listelenen dikkat edin.
  7. Konsol uygulaması sona erdirmek ve tümleşik geliştirme ortamı (IDE) için dönmek için ENTER'E basın.

Bu tablo için şema alır örnek oluşturma

Aşağıdaki örnek, çalışanlar için şema bilgileri listeler SQL Server Northwind veritabanındaki bir tablo.

OleDbSchemaGuid.Tables belirli bir oturum için erişilebilir bu tabloları (görünümler dahil olmak üzere) döndürür. Nesne dizisi belirtirseniz, {null, boş, "Çalışanlar", "TABLE"}, yalnızca Çalışanlar adlı bir tablo eklemek için süzgeç. Ardından, döndürülen şema tablo için şema bilgileri listeler.
  1. Yeni bir Visual C# konsol uygulaması) projesi oluşturun. Class1.cs, varsayılan olarak projeye eklenir.
  2. Kod penceresi için Class1 açın. Aşağıdaki kodu, Code penceresinin üstündeki ad alanı bildirimi yapıştırın:
    using System.Data;
    using System.Data.OleDb;
    					
  3. Kod penceresinde ana işlevi aşağıdaki kodu yapıştırın:
    OleDbConnection cn = new OleDbConnection();
    DataTable schemaTable;
    
    //Connect to the Northwind database in SQL Server.
    //Be sure to use an account that has permission to retrieve table schema.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=<username>;
                          Password=<strong password>;Initial Catalog=Northwind";
    cn.Open();
    
    //Retrieve schema information about the Employees table.
    schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
                  new Object[] {null, null, "Employees", "TABLE"});
    
    //List the schema info for the Employees table
    //in the format Field Descriptor : Field Value.
    for(int i = 0; i < schemaTable.Columns.Count; i++) {
       Console.WriteLine(schemaTable.Columns[i].ToString() + " : " + 
                         schemaTable.Rows[0][i].ToString());
    }
    
    //Explicitly close - don't wait on garbage collection.
    cn.Close();
    
    //Pause
    Console.ReadLine();
    					
  4. SQL Server Çalışanlar tablosunu şema alma iznine sahip bir hesapla bilgisayarınıza bağlamak için ConnectionString değiştirin.
  5. Derlemek ve proje çalıştırmak için F5 tuşuna basın. Tablolar, konsol penceresinde listelenen dikkat edin.
  6. Konsol uygulaması sona erdirmek ve ıDE'YE dönmek için ENTER'E basın.

Bir tablodaki sütunları listeler, örnek oluşturma

Aşağıdaki örnek çalışanları sütun adları, SQL Server Northwind veritabanındaki tablo listeler.

OleDbSchemaGuid.Columns bu sütunları Tablo ve görünümleri, belirli bir oturum açma erişilebilen verir. {Null, boş, "Çalışanlar", null} nesne dizisi belirtirseniz, yalnızca Çalışanlar tablosunu sütunları eklemek için filtre uygulayın.
  1. Yeni bir Visual C# konsol uygulaması) projesi oluşturun. Class1.cs, varsayılan olarak projeye eklenir.
  2. Kod penceresi için Class1 açın. Aşağıdaki kodu, Code penceresinin üstündeki ad alanı bildirimi yapıştırın:
    using System.Data;
    using System.Data.OleDb;
    					
  3. Kod penceresinde ana işlevi aşağıdaki kodu yapıştırın:
    OleDbConnection cn = new OleDbConnection();
    DataTable schemaTable;
    
    //Connect to the Northwind database in SQL Server.
    //Be sure to use an account that has permission to list the columns in the Employees table.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=<username>;
                           Password=<strong password>;Initial Catalog=Northwind";
    cn.Open();
    
    //Retrieve schema information about columns.
    //Restrict to just the Employees TABLE.
    schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, 
                  new Object[] {null, null, "Employees", null});
    
    //List the column name from each row in the schema table.
    for (int i = 0; i < schemaTable.Rows.Count; i++) {
       Console.WriteLine(schemaTable.Rows[i].ItemArray[3].ToString());
    }
    
    //Explicitly close - don't wait on garbage collection.
    cn.Close();
    
    //Pause
    Console.ReadLine();
    					
  4. SQL Server bilgisayarınızda, çalışanlar tablosunda liste sütun iznine sahip bir hesap ile bağlanmak için ConnectionString değiştirin.
  5. Derlemek ve proje çalıştırmak için F5 tuşuna basın. Çalışanlar tablosuna sütunlarından konsol penceresinde listelenen dikkat edin.
  6. Konsol uygulaması sona erdirmek ve ıDE'YE dönmek için ENTER'E basın.

Bir tablodaki birincil anahtarları listeler, örnek oluşturma

Aşağıdaki örnek listeler SQL Server Northwind çalışanların bir birincil anahtar tablosu, veritabanı ve çalışan SQL Server Pubs veritabanındaki tablo.

Bu birincil anahtarlar OleDbSchemaGuid.Primary_Keys belirli bir oturum için erişilebilir bir katalog verir. Bu örnekte, SQL Server'a, ancak belirli bir SQL Server veritabanına OleDbConnection ise:
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=<username>;
                       Password=<strong password>;"
				
yerine, bu kod Northwind ya da pubs veritabanı kısıtlama dizideki TABLE_CATALOG belirtir. Bu kod, tablonun sahibi, "dbo", TABLE_SCHEMA kısıtlama için belirtir. Buna ek olarak, bu kod, TABLE_NAME kısıtlama için tablo adlarını belirtir.

Northwind veritabanındaki Çalışanlar tablosunun birincil anahtarı edinmek için <a0></a0>, {"Kızılırmak", "dbo", "Çalışanlar"} nesne dizisi kullanın:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, 
              new Object[] {"Northwind", "dbo", "Employees"});
				
pubs veritabanındaki Employee tablosunun birincil anahtarı edinmek için <a0></a0>, {"pubs", "dbo", "Çalışan"} nesne dizisi kullanın:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, 
              new Object[] {"Pubs", "dbo", "Employee"});
				
örnek oluşturmak için şu adımları izleyin:
  1. Yeni bir Visual C# konsol uygulaması) projesi oluşturun. Class1.cs, varsayılan olarak projeye eklenir.
  2. Kod penceresi için Class1 açın. Aşağıdaki kodu, Code penceresinin üstündeki ad alanı bildirimi yapıştırın:
    using System.Data;
    using System.Data.OleDb;
    					
  3. Kod penceresinde ana işlevi aşağıdaki kodu yapıştırın:
    OleDbConnection cn = new OleDbConnection();
    DataTable schemaTable;
    
    //Connect to SQL Server.
    //Be sure to use an account that has permissions to list primary keys
    //in both the Northwind and Pubs databases.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=<username>;
                           Password=<strong password>;";
    cn.Open();
    
    //Retrieve schema information about primary keys.
    //Restrict to just the Employees TABLE in the Northwind CATALOG.
    schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, 
                  new Object[] {"Northwind", "dbo", "Employees"});
    
    //List the primary key for the first row in the schema table.
    //The first three items in the ItemArray in the row are catalog, schema, and table.
    //The fourth item is the primary key.
    Console.WriteLine(schemaTable.Rows[0].ItemArray[3].ToString());
    
    //Retrieve primary key for the Employee TABLE in the Pubs CATALOG.
    schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, 
                  new Object[] {"Pubs", "dbo", "Employee"});
    
    //List the primary key for the first row in the schema table.
    Console.WriteLine(schemaTable.Rows[0].ItemArray[3].ToString());
    
    //Explicitly close - don't wait on garbage collection.
    cn.Close();
    
    //Pause
    Console.ReadLine();
    					
  4. SQL Server bilgisayarınızın birincil anahtarları listelemek için yeterli izinlere sahip bir hesap ile bağlanmak için ConnectionString değiştirin.
  5. Derlemek ve proje çalıştırmak için F5 tuşuna basın. Northwind veritabanındaki Çalışanlar tablosunu ve çalışan tablosundaki pubs veritabanındaki birincil anahtarlar konsolda listelenen fark pencere.
  6. Konsol uygulaması sona erdirmek ve ıDE'YE dönmek için ENTER'E basın.

Referanslar

OleDbSchemaGuid üyeleri tam listesi için Microsoft .NET, aşağıdaki konuya bakın Framework Software Development Kit'e (SDK) belgeleri. Kullanılabilir kısıtlamaları listesi için OleDbSchemaGuid üyelerden birini tıklatın:
OleDbSchemaGuid üyeler
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid_members.aspx (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid_members.aspx)
Daha fazla bilgi için .NET'nda aşağıdaki konulara başvurun Framework SDK belgelerine:
Bir veritabanından şema bilgileri edinme
http://msdn.microsoft.com/en-us/library/kcax58fh.aspx (http://msdn.microsoft.com/en-us/library/kcax58fh.aspx)

OleDbConnection.GetOleDbSchemaTable yöntemi
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx)

OleDbSchemaGuid.Tables alan
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.tables.aspx (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.tables.aspx)

OleDbSchemaGuid.Columns alan
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.columns.aspx (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.columns.aspx)

OleDbSchemaGuid.Primary_Keys alan
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.primary_keys.aspx (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.primary_keys.aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster kbsystemdata KB309681 KbMttr
Otomatik TercümeOtomatik 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:309681  (http://support.microsoft.com/kb/309681/en-us/ )