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 = tabela
End 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 DataTable
Dim criterioSQL As String criterioSQL = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_TYPE"
Try
Dim da As New SqlDataAdapter(criterioSQL, conexaoSQL) da.Fill(tabela)
For Each dr As DataRow In tabela.Rows
If dr("TABLE_NAME").ToString = nomeTabela Then
Return 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"
Try
Dim 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)
Bom estudo e até o próximo artigo .NET
![]()
José Carlos Macoratti