VB.NET - Obtendo o esquema de tabelas no SQL Server


Se você precisa obter a informação sobre o esquema de um banco de dados SQL Server , vai perceber neste artigo que a tarefa é trivial.

Neste artigo vou mostrar como obter informações sobre o esquema de tabelas do banco de dados Northwind do SQL Server. Você precisa ter o SQL Server instalado com este banco de dados presente para acompanhar este artigo.

Abaixo temos a figura que mostra o banco de dados Northwind do SQL Server usado neste artigo.

Inicie um novo projeto do tipo Windows Application usando a linguagem VB.NET e no formulário padrão inclua um componente DataGrid , um componente Button e dois componentes radioButton conforme o layout abaixo:

Defina os imports usado pelo sistema conforme abaixo :

Imports System
Imports System.Configuration

Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb

Em seguida vamos criar um arquivo de configuração para aplicação onde iremos armazenar as strings de conexão para o banco de dados SQL Server e para o banco de dados Access.

Abaixo o código do nosso arquivo de configuração:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="OleDb_ConnectString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb" />
<add key="Sql_ConnectString" value="server=(local);trusted_connection=true;database=Northwind;Integrated Security=SSPI" />
</appSettings>
</configuration>

Nota: Para saber mais sobre como criar o seu arquivo de configuração leia o artigo : NET - Tratando arquivos de configuração

No evento Click do botão - Obter esquema das tabelas - inclua o seguinte código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnObterTabelas.Click
Dim schemaTable As DataTable

If rdbSQLServer.Checked Then
    Dim getSchemaTableText As [String] = "SELECT * " & "FROM INFORMATION_SCHEMA.TABLES " & "WHERE TABLE_TYPE = 'BASE TABLE' ORDER     BY TABLE_TYPE"

   ' retorna o esquema das tabelas para o SQL Server
   Dim da As New SqlDataAdapter(getSchemaTableText, ConfigurationSettings.AppSettings("Sql_ConnectString"))
   schemaTable = New DataTable
   da.Fill(schemaTable)

   dgSchema.CaptionText = "SQL Server .NET Provider"
Else
   Dim conn As New OleDbConnection(ConfigurationSettings.AppSettings("OleDb_ConnectString"))
   conn.Open()
   ' obtem o esquema para tabelas OLEDB
   schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
   conn.Close()

   dgSchema.CaptionText = "OLE DB .NET Provider"
End If

' vincula o mode de visualização padrão do esquema ao datagrid
dgSchema.DataSource = schemaTable.DefaultView
End Sub

Execute o projeto ;selecione a opção SQL Server .NET e clique no botão de comando. O resultado obtido será o exibido na figura abaixo:

Como bônus você pode selecionar a opção OleDB .NET e obter o esquema do banco de dados Northwind.mdb conforme figura abaixo:

Vamos agora as considerações:

A solução usada para o SQL Server utiliza a informação de esquemas Views disponíveis no SQL Server. Estas Views fornecem o acesso independente a tabela do sistema para obter metadados.

As Views estão definidas em cada banco de dados em um esquema chamado INFORMATION_SCHEMA. A fim de acessá-la basta definir o nome completo da VIEW. Neste artigo a View para as tabelas é acessada através do seguinte sintaxe:

INFORMATION_SCHEMA.TABLES

A seguir a relação das principais informações das Views de esquema disponíveis no SQL Server:

Nome Descrição
CHECK_CONSTRAINT Verifica restrições
COLUMN_PREVILEGES Colunas com privilégios garantidos para ou pelo usuário atual
COLUMNS Todas as colunas
CONSTRAINT_TABLE_USAGE Tabelas que possuem uma restrição definida
DOMAINS Todos os tipos de dados definidos pelo usuário
KEY_COLUMN_USAGE Colunas restringidas como uma chave
PARAMETERS Todos os parâmetros para funções definidas pelo usuário e stored procedures
ROUTINES Todas as funções definidas pelo usuário e stored procedures
SCHEMATA Todos os banco de dados
TABLE_CONSTRAINTS Todas as restrições das tabelas
TABLE_PRIVILEGES Tabelas com privilégio garantido para ou pelo usuário atual
TABLES Todas as tabelas
VIEWS_TABLE_USAGE Tabelas usadas em uma View
VIEWS Todas as Views

A informação sobre os dados será restringida aquelas que o usuário tiver permissão.

Para o SQL Server usamos a seguinte instrução SQL :

"SELECT * " & "FROM INFORMATION_SCHEMA.TABLES " & "WHERE TABLE_TYPE = 'BASE TABLE' ORDER     BY TABLE_TYPE"

Esta solução mostra como retornar informações sobre as tabelas usando INFORMATION_SCHEMA.TABLES. Abaixo temos os dados que serão obtidos:

Nome da Coluna Tipo de Dado Descrição
TABLE_CATALOG nvarchar(128) nome do banco de dados
TABLE_SCHEMA nvarchar(128) proprietário da tabela
TABLE_NAME sysname nome da tabela
TABLE_TYPE varchar(10) o tipo da tabela (BASE_TABLE ou VIEW)

A solução que usamos para obter a informação do banco de dados Access Northwind.mdb utiiza o método GetOleDbSchemaTable() do objeto OleDbConnection. Este método retorna a informação do esquema para o banco de dados indicado pela enumeração na classe OleDbSchemaGuid.

Simples não é mesmo...

Aguarde mais artigos com VB.NET.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti