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