Artigo: 309681 - Última revisão: quinta-feira, 1 de Julho de 2004 - Revisão: 3.4

Como obter informações de esquema utilizando GetOleDbSchemaTable e Visual C# .NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo demonstra como utilizar o método GetOleDbSchemaTable do objecto OleDbConnection no ADO.NET para obter informações de esquema de base de dados. Esquema informações numa origem de dados incluem bases de dados ou catálogos que estão disponíveis a partir da origem de dados, tabelas e vistas de uma base de dados, bem como restrições existentes e assim sucessivamente. Informações de esquema numa tabela incluem chaves primárias, colunas e campos de número automático.

Note que nenhum método é equivalente a GetOleDbSchemaTable quando utiliza um objecto SqlClient.SqlConnection . O fornecedor de dados do SQL Server .NET expõe informações de esquema back-end através de procedimentos armazenados e vistas informativas. Para mais informações acerca de vistas e procedimentos armazenados que estão disponíveis através do Microsoft SQL Server, consulte a referência de Transact-SQL na MSDN Library.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server ou Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Visual Studio .NET
  • Noções básicas do ADO.NET e sintaxe

GetOleDbSchemaTable método do objecto OleDbConnection

O fornecedor de OLE DB .NET Data utiliza o método GetOleDbSchemaTable do objecto OleDbConnection para expor informações de esquema. GetOleDbSchemaTable devolve uma DataTable é povoado com as informações de esquema.

O primeiro argumento de GetOleDbSchemaTable é o parâmetro de esquema, um argumento OleDbSchemaGuid que identifica as informações de esquema para devolver (tais como tabelas, colunas e as chaves primárias). O segundo argumento é uma matriz de objectos de restrições para filtrar as linhas que são devolvidas no esquema do DataTable (por exemplo, pode especificar restrições de nome, tipo, proprietário e /or os esquemas de tabela).

OleDbSchemaGuid membros

O argumento OleDbSchemaGuid Especifica o tipo da tabela de esquema para o método GetOleDbSchemaTable . Alguns dos membros OleDbSchemaGuid incluem o seguinte:
  • Colunas
  • Chaves externas
  • Índices
  • Chaves primárias
  • Tabelas
  • Vistas
Para uma lista completa dos membros OleDbSchemaGuid , consulte o Web site "OleDbSchemaGuid membros" na secção References.

Restrições

As restrições são uma matriz de objectos de valores de filtro, cada uma delas corresponde a um DataColumn no resultante DataTable . O argumento OleDbSchemaGuid determina as restrições relevantes. Por exemplo, quando especifica um OleDbSchemaGuid das tabelas, a matriz de restrições é:
{TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE}
Para rever as restrições disponíveis, clique em qualquer dos membros OleDbSchemaGuid no seguinte Web site da Microsoft:
OleDbSchemaGuid membros
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)
Quando passar valores na matriz de restrição, inclua a palavra-chave de Nulo Visual C# .NET para elementos de matriz que não contêm valores. Por exemplo, se pretender obter tabela de esquemas, utilize OleDbSchemaGuid.Tables . No entanto, se especificar tabelas, esta também devolve aliases, sinónimos, vistas e outros objectos relacionados. Assim, se pretender filtrar todos os objectos excepto tabelas, utilize uma restrição de TABLE para TABLE_TYPE. Pode utilizar um valor nulo para TABLE_CATALOG TABLE_SCHEMA e TABLE_NAME porque não está a filtrar estes objectos:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
              new Object[] {null, null, null, "TABLE"});
				

DataTable devolvido

O DataTable método GetOleDbSchemaTable devolve tem uma linha para cada objecto que cumpre o tipo de OleDbSchemaGuid e os critérios de restrição. DataTable tem uma coluna para cada uma das colunas de restrição, é seguido de informações de esquema adicionais com base no campo OleDbSchemaGuid .

Por exemplo, quando utiliza o código seguinte, cada linha no DataTable devolvida é uma tabela de base de dados:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
              new Object[] {null, null, null, "TABLE"});
				
as colunas que são devolvidas no DataTable são as colunas de restrição (TABLE_CATALOG TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE), que são seguidas pelas colunas adicionais esquema TABLE_GUID, descrição, TABLE_PROPID, DATE_CREATED e DATE_MODIFIED.

Para obter esta lista de nomes de coluna (ou seja, os campo descritores, tais como TABLE_CATALOG TABLE_SCHEMA e TABLE_NAME), pode utilizar a posição ordinal das colunas. Note que a matriz de colunas é baseado em zero:
for (int i = 0; i < schemaTable.Columns.Count; i++) {
   Console.WriteLine(schemaTable.Columns[i].ToString());
}
				
para obter os valores em cada coluna (ou seja, as tabela real nomes, como categorias, os clientes e empregados), pode utilizar a posição ordinal ItemArray da linha. Note que ItemArray é baseado em zero:
for (int i = 0; i < schemaTable.Rows.Count; i++) {
   Console.WriteLine(schemaTable.Rows[i].ItemArray[2].ToString());
}
				

Criar uma base de dados exemplo que lista de tabelas

O exemplo que se segue lista tabelas da base de servidor SQL da base de dados.

OleDbSchemaGuid.Tables devolve essas tabelas (incluindo as vistas) que estão acessíveis para uma determinada sessão. Se especificar uma matriz de objectos de {nulo, nulo, nulo, "TABLE"}, filtrar para incluir apenas uma TABLE_TYPE da tabela. Em seguida, listar a tabela de nomes (TABLE_NAME) de cada linha na tabela de esquema devolvido.
  1. Inicie o Visual Studio NET..
  2. Crie um novo projecto de aplicação do Visual C# consola. Class1.cs é adicionado ao projecto por predefinição.
  3. Abra a janela de código para Aula1. Cole o código seguinte na parte superior da janela código, acima a declaração de espaço de nomes :
    using System.Data;
    using System.Data.OleDb;
    					
  4. Na janela código, cole o seguinte código para a função principal :
    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. Modificar ConnectionString para ligar o computador do SQL Server com uma conta que tem permissão para lista de tabelas na base de dados Adamastor.
  6. Prima a tecla F5 para compilar e executar o projecto. Repare que as tabelas são listadas na janela da consola.
  7. Prima ENTER para terminar a aplicação de consola e regressar a IDE (Integrated Development Environment).

Criar o exemplo que obtém o esquema para uma tabela

O exemplo que se segue lista informações de esquema para os empregados tabela da base de dados SQL Server Adamastor.

OleDbSchemaGuid.Tables devolve essas tabelas (incluindo as vistas) que estão acessíveis para uma determinada sessão. Se especificar uma matriz de objectos de {nulo, nulo, "Empregados", "TABLE"}, filtrar para incluir apenas uma tabela Empregados. Em seguida, lista as informações de esquema para a tabela de esquema devolvido.
  1. Crie um novo projecto de aplicação do Visual C# consola. Class1.cs é adicionado ao projecto por predefinição.
  2. Abra a janela de código para Aula1. Cole o código seguinte na parte superior da janela código, acima a declaração de espaço de nomes :
    using System.Data;
    using System.Data.OleDb;
    					
  3. Na janela código, cole o seguinte código para a função principal :
    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. Modificar ConnectionString para ligar o computador do SQL Server com uma conta que tem permissão para obter o esquema da tabela Empregados.
  5. Prima F5 para compilar e executar o projecto. Repare que as tabelas são listadas na janela da consola.
  6. Prima ENTER para terminar a aplicação de consola e regressar ao IDE.

Criar o exemplo que listas de colunas numa tabela

A lista de exemplo seguintes nomes de colunas as empregados da tabela da base de dados SQL Server Adamastor.

OleDbSchemaGuid.Columns devolve essas colunas de tabelas e vistas que são acessíveis para uma determinada sessão. Se especificar uma matriz de objectos de nulo, nulo, "Empregados", nulo, filtrar para incluir apenas as colunas da tabela Empregados.
  1. Crie um novo projecto de aplicação do Visual C# consola. Class1.cs é adicionado ao projecto por predefinição.
  2. Abra a janela de código para Aula1. Cole o código seguinte na parte superior da janela código, acima a declaração de espaço de nomes :
    using System.Data;
    using System.Data.OleDb;
    					
  3. Na janela código, cole o seguinte código para a função principal :
    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. Modificar ConnectionString para ligar o computador do SQL Server com uma conta que tem permissão para lista de colunas na tabela Empregados.
  5. Prima F5 para compilar e executar o projecto. Repare que as colunas da tabela Empregados são listadas na janela da consola.
  6. Prima ENTER para terminar a aplicação de consola e regressar ao IDE.

Criar o exemplo que lista as chaves primárias numa tabela

As listas de exemplo seguinte as chaves primárias dos empregados tabela na base de servidor de SQL da base de dados e do empregado da tabela na base de dados Pubs do SQL Server.

OleDbSchemaGuid.Primary_Keys devolve as chaves primárias de um catálogo que são acessíveis para uma determinada sessão. Neste exemplo, OleDbConnection é para o SQL Server, mas não a uma base de dados específico do SQL Server:
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=<username>;
                       Password=<strong password>;"
				
em vez disso, este código especifica as bases de dados Adamastor ou pubs como TABLE_CATALOG na matriz de restrição. Este código especifica o proprietário da tabela, "dbo", para a restrição TABLE_SCHEMA. Além disso, este código especifica os nomes de tabela para a restrição TABLE_NAME.

Para obter a chave primária da tabela Empregados na base de dados Adamastor, pode utilizar uma matriz de objectos de {"Adamastor", "dbo", "Empregados"}:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, 
              new Object[] {"Northwind", "dbo", "Employees"});
				
para obter a chave primária da tabela Empregados na base de dados Pubs, utilize uma matriz de objectos de {"pubs", "dbo", "Empregado"}:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, 
              new Object[] {"Pubs", "dbo", "Employee"});
				
para criar o exemplo, siga estes passos:
  1. Crie um novo projecto de aplicação do Visual C# consola. Class1.cs é adicionado ao projecto por predefinição.
  2. Abra a janela de código para Aula1. Cole o código seguinte na parte superior da janela código, acima a declaração de espaço de nomes :
    using System.Data;
    using System.Data.OleDb;
    					
  3. Na janela código, cole o seguinte código para a função principal :
    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. Modificar ConnectionString para ligar o computador do SQL Server com uma conta que tenha permissões suficientes para listar as chaves primárias.
  5. Prima F5 para compilar e executar o projecto. Repare que as chaves primárias da tabela de empregados na base de dados Adamastor e a tabela Empregados na base de dados Pubs estão listadas na consola de janela.
  6. Prima ENTER para terminar a aplicação de consola e regressar ao IDE.

Referências

Para obter uma lista completa dos membros OleDbSchemaGuid , consulte o tópico seguinte no Microsoft .NET documentação Framework Software Development Kit (SDK). Para uma lista de restrições disponíveis, clique em qualquer dos membros OleDbSchemaGuid :
OleDbSchemaGuid membros
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)
Para obter mais informações, consulte os seguintes tópicos no .NET Framework SDK documentação:
Obter informações sobre o esquema de uma base de dados
http://msdn.microsoft.com/en-us/library/kcax58fh.aspx (http://msdn.microsoft.com/en-us/library/kcax58fh.aspx)

Método OleDbConnection.GetOleDbSchemaTable
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)

Campo OleDbSchemaGuid.Tables
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)

Campo OleDbSchemaGuid.Columns
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)

Campo OleDbSchemaGuid.Primary_Keys
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)

A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbmt kbhowtomaster kbsystemdata KB309681 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 309681  (http://support.microsoft.com/kb/309681/en-us/ )