C#-  Exibindo os banco de dados e as tabelas para uma instância do SQL Server

   Neste artigo veremos como exibir os banco de dados e respectivas tabelas para uma instância local do SQL Server usando a linguagem C#.

Objetivos

Exibir os bancos de dados e respectivas tabelas de uma instância do SQL Server Local.

Vamos exibir os banco de dados em um controle ListBox.

O usuário poderá selecionar um banco de dados existente no controle ListBox para visualizar as suas tabelas em um controle DataGridView.

Recursos usados:

Criando o projeto

Abra o Visual Studio 2012 Express for Windows Desktop e clique em New Project;

Selecione a linguagem Visual Basic  e o template Windows Forms Application e informe o nome Exibindo_BD_Tabelas;

No formulário form1.cs do projeto vamos incluir os seguintes controles:

Disponha os controles conforme o leiaute da figura abaixo:


No formulário form1.cs vamos também declarar os namespaces usados no projeto:
 

using System;

using System.Data;

using System.Data.SqlClient;

using System.Windows.Forms;

using System.Configuration;

 

A seguir, logo após a declaração da classe Form1, vamos definir uma variável do tipo DataTable que será visível em todo o formulário:

DataTable schemaTable;

1- Listando os banco de dados do SQL Server

 

No evento Click do botão de comando btnListarBancoDados vamos definir o código abaixo que irá listar no controle ListBox - lbSchema - os banco de dados existente no SQL Server Local:
 

private void btnListarBancoDados_Click(object sender, EventArgs e)
 {
            using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString))
            {
                con.Open();
                DataTable databases = con.GetSchema("Databases");
                foreach (DataRow database in databases.Rows)
                {
                    //obtem informações sobre o nome do banco de dados , seu id e a data de criação
                    String databaseName = database.Field<String>("database_name");
                    short dbID = database.Field<short>("dbid");
                    DateTime datacriacao = database.Field<DateTime>("create_date");
                    //so vou exibir o nome do banco de dados
                    lbSchema.Items.Add(databaseName);
                }
         } 
  }

Entendendo os principais pontos do código:

Cada classe Connection em cada um dos provedores gerenciados do .NET Framework implementa um método GetSchema que é usado para recuperar informações de esquema sobre o banco de dados que está conectado no momento; as informa de esquema retornada pelo método GetSchema vem na forma de um DataTable.

O método GetSchema é um método sobrecarregado que fornece parâmetros opcionais para especificar a coleção de esquema a ser retornada e para restringir a quantidade de informações retornada.

DataTable databases = con.GetSchema("Databases");

Após extrair a informação sobre o nome do banco de dados estamos exibindo os nomes no controle ListBox:  lbSchema.Items.Add(databaseName);

2- Listando as tabelas de um banco de dados do SQL Server

Após selecionar um banco de dados podemos exibir as suas tabelas.

Para exibir as tabelas de banco de dados do SQL Server usamos a informação das Views disponíveis no SQL Server.

Essas Views fornecem o acesso independente à 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.

A view usada tem a 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á restrita àquelas 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)

Nota : Para obter a informação do banco de dados Access (.mdb) podemos usar 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.

O código associado ao evento Click do botão de comando btnObterSchemas  que irá retornar o nome das tabelas exibindo-as em um controle DataGridView é dado a seguir :

 private void btnObterSchemas_Click(object sender, EventArgs e)
        {
            try
            {
                String getSchemaTableText = "SELECT * " + "FROM INFORMATION_SCHEMA.TABLES " + "WHERE TABLE_TYPE = 'BASE TABLE' ORDER     BY TABLE_TYPE";
                // retorna o esquema das tabelas para o SQL Server
                string strConexao = @"Data Source=(LocalDB)\v11.0;Initial Catalog=" + lbSchema.SelectedItem + ";Integrated Security=True";
                SqlDataAdapter da = new SqlDataAdapter(getSchemaTableText,strConexao) ;
                schemaTable = new DataTable();
                da.Fill(schemaTable);
                dgvSchema.DataSource = schemaTable;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

No código, lbSchema.SelectedItem representa o nome do banco de dados selecionado no controle listbox.

Executando o projeto e selecionando um banco de dados existente iremos obter o seguinte resultado:

Pegue o projeto completo aqui :   Exibindo_DB_Tabelas.zip 

Filipenses 1:21 Porque para mim o viver é Cristo, e o morrer é lucro. (apóstolo Paulo)

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