 VB.NET 2005  -  
Verificar se uma tabela existe no SQL Server
  
VB.NET 2005  -  
Verificar se uma tabela existe no SQL Server
Como saber se uma determinada tabela existe no SQL Server ? Creio que a melhor forma de responder esta pergunta é mostrar como obter o resultado esperado com um exemplo usando o VB 2005 e SQL Server 2005 ambos da versão Express Edition.
Eu vou usar o banco de dados Cadastro.mdf que foi criado no SQL Server 2005. Para detalhes sobre o assunto acompanhe o artigo : VB.NET 2005 - Criando Objetos Básicos de dados. Esta base de dados possui duas tabelas : Clientes e Estados.
Crie um novo projeto no VB2005 chamado tabelaExisteNet e no formulário padrão inclua um componente DataGridView , um componente Button, dois Labels e um TextBox, conforme figura abaixo:
|  | 
A string de conexão com o banco de dados usada será armazenada usando o recurso My.Settings conforme os seguintes passos:
|  | 
iremos usar o seguinte namespace no projeto : Imports System.Data.SqlClient
No evento Click do botão de comando insira o código abaixo:
|   Private Sub btnVerifica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerifica.Click
        Dim conCadastro As SqlConnection = New SqlConnection(My.Settings.connSQL)
        If Not (txtNomeTabela.Text = String.Empty) Then
If existeTabela(conCadastro, txtNomeTabela.Text) = False Then                 MessageBox.Show("Não existe a tabela indica, verifique...", "Tabela não Existe", _ 
                                             MessageBoxButtons.OK, MessageBoxIcon.Stop)Exit Sub Else Dim strSql As String = "SELECT * FROM " & txtNomeTabela.Text Dim da As New SqlDataAdapter(strSql, conCadastro)                 Dim tabela As New DataTable
                da.Fill(tabela)
                dgvTabela.DataSource = tabelaEnd If         else
              MsgBox("Nome da tabela inválido...", MsgBoxStyle.Critical, "Nome Inválido")End If End Sub | 
No código acima estamos usando a função existeTabela para verificar se a tabela informada realmente existe no banco de dados Cadastro.mdf. O código da função é dado abaixo:
| Private Function existeTabela(ByVal conexaoSQL As SqlConnection, ByVal nomeTabela As String) As Boolean
        Dim tabela As New DataTableDim criterioSQL As String         criterioSQL = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_TYPE"
        TryDim da As New SqlDataAdapter(criterioSQL, conexaoSQL)             da.Fill(tabela)
            For Each dr As DataRow In tabela.Rows                If dr("TABLE_NAME").ToString = nomeTabela ThenReturn True End If Next Return False Catch ex As Exception             MessageBox.Show("ERRO " & ex.Message, "Verifica tabela")Return False End Try End Function | 
Abaixo temos o resultado da execução do projeto para os dois casos possíveis:
|  | 
     | 
| A tabela Estados existe e é exibida no DataGridView | A tabela Teste não existe na base de dados | 
Uma variação desta função seria preencher um combobox com os nomes das tabelas existentes na base de dados. Para obter tal resultado vou criar a função listaTabelas() que retorna um ArrayList com os nomes das tabelas existentes. Veja abaixo o código:
| Private Function listaTabela(ByVal conexaoSQL As SqlConnection, ByVal nomeTabela As String) As ArrayList Dim tabela As New DataTable Dim criterioSQL As String Dim tabelas As New ArrayList         criterioSQL = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_TYPE"
        TryDim da As New SqlDataAdapter(criterioSQL, conexaoSQL) da.Fill(tabela) For Each dr As DataRow In tabela.Rows                 tabelas.Add(dr("TABLE_NAME").ToString)Next Catch ex As Exception             MessageBox.Show("ERRO " & ex.Message, "Existe tabela")End Try Return tabelas End Function | 
Inclua uma combobox e um novo controle Button no formulário e no evento Click deste segundo botão de comando inclua o seguinte código:
| Private Sub Button1_Click(ByVal 
    sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim retorno As ArrayList If Not (txtNomeTabela.Text = String.Empty) Then      retorno = listaTabela(conCadastro, txtNomeTabela.Text) | 
Executando o projeto e clicando neste segundo botão obtemos:

Pegue o código completo do projeto aqui :
 tabelaExisteNet.zip (sem o banco de dados)
tabelaExisteNet.zip (sem o banco de dados)
Bom estudo e até o próximo artigo  .NET

José Carlos Macoratti