Neste artigo vou mostrar como podemos criar um banco de dados, tabelas e realizar outras operações no SQL Server via código usando a linguagem VB .NET. |
Basta você googar 'Macoratti criar banco de dados' que vai encontrar muitas referências.
Volto portanto ao assunto desta vez usando o Visual Studio 2015 Community mostrando como criar um banco de dados SQL Server, uma tabela e realizar outras operações simples de forma a recordar alguns conceitos da ADO .NET e dos comandos SQL usados nesta abordagem.
É um artigo prático, e vamos realizar as seguintes operações:
Verificar se existe uma instância do SQL Server na máquina local;
Criar um banco de dados no SQL Server;
Criar uma tabela com 3 campos (ID, Nome e Email) e incluir um registro;
Listar as tabelas do banco de dados;
Apagar uma tabela do banco de dados;
Exibir os dados da tabela;
então vamos ao que interessa...
Recursos Usados
Criando o projeto Windows Forms
Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Windows Forms Application.
Informe um nome a seu gosto. Eu vou usar o nome Vbnet_CriarDB;
Selecione o formulário Form1.vb e partir da ToolBox inclua os seguintes controles:
1 LisbBox - lbDados
7 Buttons
2 GroupBox
4 TextBox
1 Combobox
Disponha os controles conforme o leiaute da figura abaixo:
A seguir declare os seguintes namespaces no formulário:
Imports System.Data.SqlClient
Imports Microsoft.Win32
Após a declaração do formulário
inclua o código a seguir onde definimos as variáveis usadas no formulário:
Private ConnectionString As
String = ""
Private rdr As SqlDataReader = Nothing
Private con As SqlConnection = Nothing
Private cmd As SqlCommand = Nothing
Private da As SqlDataAdapter = Nothing
1- Verificando se existe uma instância do SQL Server na máquina local
No evento Click do botão de comando - Verificar SQL Server - inclua o código abaixo:
Private Sub btnVerificarSQLServer_Click(sender As Object, e As EventArgs) Handles btnVerificarSQLServer.Click
Dim registroView As RegistryView = If(Environment.Is64BitOperatingSystem, RegistryView.Registry64, RegistryView.Registry32)
Using chaveRegistroLocalMachine As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registroView)
Dim instanciaChave As RegistryKey = chaveRegistroLocalMachine.OpenSubKey("SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", False)
lbDados.Items.Add("Nome da máquina\Nome da Instância")
If instanciaChave IsNot Nothing Then
For Each nomeInstancia In instanciaChave.GetValueNames()
lbDados.Items.Add(Environment.MachineName + "\" + nomeInstancia)
Next
Else
MessageBox.Show("SQL Server e instâncias não localizados")
End If
End Using
End Sub
|
Neste código estamos verificando as instâncias do SQL Server armazenadas no registro do Windows. Atente para fato que dependendo da versão do seu sistema operacional o registro pode estar armazenado em outra chave do registro.
Existe uma outra abordagem cujo código é mostrado a seguir, mas ela é mais demorada e mais propensa a erros:
'Podemos usar essa abordagem mas é mais demorada e mais sujeita a erros
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim sqldatasourceenumerator1 As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance
Dim datatable1 As DataTable = sqldatasourceenumerator1.GetDataSources()
For Each row As DataRow In datatable1.Rows
lbDados.Items.Add("****************************************")
lbDados.Items.Add("Server Name:" + row("ServerName"))
lbDados.Items.Add("Instance Name:" + row("InstanceName"))
lbDados.Items.Add("Is Clustered:" + row("IsClustered"))
lbDados.Items.Add("Version:" + row("Version"))
lbDados.Items.Add("****************************************")
Next
|
2- Criando um banco de dados no SQL Server
Agora no evento Click do botão - Criar Banco de dados - inclua o código abaixo:
Private Sub btnCriarBDSQLServer_Click(sender As Object, e As EventArgs) Handles btnCriarBDSQLServer.Click
'Para criar um banco de dados inicial devemos definir Initial Catalog como Master
' Defina a string de conexão com o SQL Server : "Data Source=;" + "Initial Catalog=;" + "Integrated Security=I;"
ConnectionString = MontaStringConexaoSQLServer("Master")
' cria e inicializa a string de conexão
Dim minhaConexaoSQLServer As SqlConnection = New SqlConnection(ConnectionString)
' define uma string para armazenar a consulta SQL que vai criar o BD
Dim sql As String = "CREATE database " & txtNomeBD.Text
' cria o comando para execução na conexão atual
Dim cmd As SqlCommand = New SqlCommand(sql, minhaConexaoSQLServer)
Try
cmd.Connection.Open() 'abre a conecao com o cmd
cmd.ExecuteNonQuery() 'Executa a consulta
lbDados.Items.Add("O banco de dados " & txtNomeBD.Text & " foi criado com sucesso.")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
Finally
cmd.Connection.Close() 'Fecha a conexão
End Try
End Sub
|
Como o código ja esta comentado vou acrescentar as seguintes informações:
- A string de conexão usada esta no formato : "Data Source=;" + "Initial Catalog=;" + "Integrated Security=;"
- Como vamos criar um banco de dados novo estamos usando a instância 'Master' do SQL Server no método MontaStringConexaoSQLServer()
- O método MontaStringConexaoSQLServer() vai usar as informações fornecidas pelo usuário para o DataSource, o banco de dados, que pode ser Master ou o nome informado, e o valor true ou false da combobox cboIntegrateSecurity.
- A instrução SQL usada para criar o banco de dados é : CREATE database nome_do_banco_dados
Abaixo vemos o código deste método:
Private Function MontaStringConexaoSQLServer(ByVal flag As String) As String
Dim dataSource As String = ""
Dim initialCatalog As String = ""
Dim integratedSecurity As Boolean = False
Dim connectionString As String = ""
If Not String.IsNullOrWhiteSpace(txtDataSource.Text) Then
dataSource = txtDataSource.Text
Else
MessageBox.Show("Informe o DataSource...")
Return ""
End If
If Not String.IsNullOrWhiteSpace(txtInitialCatalog.Text) Then
If flag = "Master" Then
initialCatalog = txtInitialCatalog.Text
ElseIf flag = "Tabela" Then
initialCatalog = txtNomeBD.Text
End If
Else
MessageBox.Show("Informe o Initial Catalog...")
Return ""
End If
If cboIntegrateSecurity.Text = "true" Then
integratedSecurity = True
ElseIf cboIntegrateSecurity.Text = "false" Then
integratedSecurity = False
Else
MessageBox.Show("Informe o Integrated Security...")
Return ""
End If
connectionString = "Data Source=" & dataSource & ";Initial Catalog=" & initialCatalog & ";Integrated Security=" & integratedSecurity
Return connectionString
End Function
|
3- Criando uma tabela no banco de dados
Agora no evento Click do botão - Criar uma tabela no Banco de dados - inclua o código abaixo:
Private Sub btnCriarTabela_Click(sender As Object, e As EventArgs) Handles btnCriarTabela.Click
'define a string de conexão com a banco de dados que foi criado
ConnectionString = MontaStringConexaoSQLServer("Tabela")
Try
'cria e inicializa a string de conexão
Dim cn As SqlConnection = New SqlConnection(ConnectionString)
'define a consulta SQL para criar a tabela com os campos : ID, Nome e Email
Dim sql As String = "CREATE TABLE " & txtNomeTabela.Text & "(ID int NOT NULL,
Nome varchar(50) NULL,
Email varchar(150) NULL)"
'cria comando na conexão para executar a consulta
cmd = New SqlCommand(sql, cn)
'abre a conexao
cmd.Connection.Open()
'executa o comando
cmd.ExecuteNonQuery()
' adicina um registro na tabela
sql = "INSERT INTO " & txtNomeTabela.Text & "(ID, Nome, Email) " + "VALUES (1001, 'Macoratti', 'macoratti@yahoo.com' ) "
cmd = New SqlCommand(sql, cn)
cmd.ExecuteNonQuery()
lbDados.Items.Add("A tabela " & txtNomeTabela.Text & " foi criada com sucesso.")
'lista as tabelas existentes no banco de dados para a conexão atual
ListaTabelas(GetTabelasBancoDados(ConnectionString))
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
Finally
cmd.Connection.Close()
End Try
End Sub
|
Neste código vale a pena comentar que :
- Para criar a tabela estamos usando o seguinte comando SQL :
"CREATE TABLE " & txtNomeTabela.Text & "(ID
int NOT NULL,
Nome varchar(50) NULL,
Email varchar(150) NULL)"
Note que informamos os nomes dos campos que desejamos criar, o seu tipo e a
indicação se o mesmo é null ou não.
Para incluir um registro no banco de dados usamos a instrução SQL :
"INSERT INTO " & txtNomeTabela.Text & "(ID, Nome, Email) " + "VALUES (1001, 'Macoratti', 'macoratti@yahoo.com' )
Onde informamos os nomes dos campos e seus valores.
Para exibir as tabelas do banco de dados chamamos o método ListaTabelas() onde passamos o método GetTabelasBancoDados().
O método GetTabelasBancoDados() vai retornar uma lista de strings contendo os nomes das tabelas existentes conforme mostra o código a seguir:
Private Function GetTabelasBancoDados(ByVal conexaoSQLServer As String) As List(Of String)
'define as variáveis usadas
Dim lista_Tabelas As New List(Of String)
Dim cn As SqlConnection
Dim cmd As SqlDataAdapter
Dim ds As New DataSet()
'faz a conexão com o banco de dados e abre a conexao
cn = New SqlConnection(conexaoSQLServer) '
cn.Open()
'define a consulta para retornar as tabelas
cmd = New SqlDataAdapter("SELECT * FROM INFORMATION_SCHEMA.tables ORDER BY TABLE_NAME", cn)
'preenche o dataset
cmd.Fill(ds)
'fecha a conexao
cn.Close()
For Each table As DataTable In ds.Tables
For Each row As DataRow In table.Rows
'Pega somente as tabelas e emite as Views
If row.ItemArray(3).ToString = "BASE TABLE" Then
For Each col As DataColumn In table.Columns
If col.ToString() = "TABLE_NAME" Then
lista_Tabelas.Add(row(col).ToString())
Exit For
End If
Next
End If
Next
Next
'retorna uma lista de strings contendo as tabelas do BD
Return lista_Tabelas
End Function
|
Neste código usamos usando a instrução :
SELECT * FROM INFORMATION_SCHEMA.tables ORDER BY TABLE_NAME
Para retornar as tabelas existentes.
O método ListaTabelas() vai receber a lista de strings contendo o nome das tabelas e vai usar um laço For Each para exibir as tabelas:
Private Sub ListaTabelas(ByVal nomes As List(Of String)) lbDados.Items.Add("Tabelas do banco de dados") For Each nome In nomes lbDados.Items.Add(nome) Next End Sub |
4- Lista as tabelas do banco de dados
Agora no evento Click do botão - Lista Tabelas - inclua o código abaixo:
Private Sub btnListaTabelas_Click(sender As Object, e As EventArgs) Handles btnListaTabelas.Click
'cria e inicializa uma string de conexão
ConnectionString = MontaStringConexaoSQLServer("Tabela")
Try
ListaTabelas(GetTabelasBancoDados(ConnectionString))
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
End Try
End Sub
|
Este código apenas vai listar as tabelas existentes.
5- Apagar uma tabela do banco de dados
Agora no evento Click do botão - Apagar tabela - inclua o código abaixo:
Private Sub btnApagarTabela_Click(sender As Object, e As EventArgs) Handles btnApagarTabela.Click
'define a string de conexão com a banco de dados que foi criado
ConnectionString = MontaStringConexaoSQLServer("Tabela")
Try
'cria e inicializa a string de conexão
Dim cn As SqlConnection = New SqlConnection(ConnectionString)
'define a consulta SQL para excluir a tabela
Dim sql As String = "DROP TABLE " & txtNomeTabela.Text
'cria comando na conexão para executar a consulta
cmd = New SqlCommand(sql, cn)
'abre a conexao
cmd.Connection.Open()
'executa o comando
cmd.ExecuteNonQuery()
lbDados.Items.Add("A tabela " & txtNomeTabela.Text & " foi excluída com sucesso.")
'lista as tabelas existentes no banco de dados para a conexão atual
ListaTabelas(GetTabelasBancoDados(ConnectionString))
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
Finally
cmd.Connection.Close()
End Try
End Sub
|
Neste código estamos usando a instrução SQL : DROP TABLE para excluir a tabela informada em txtNomeTabela.Text.
6- Exibir os registros da tabela
Agora no evento Click do botão - Exibir dados da tabela - inclua o código abaixo:
Private Sub btnExibirDados_Click(sender As Object, e As EventArgs) Handles btnExibirDados.Click
ExibirDadosTabela()
End Sub
Private Sub ExibirDadosTabela()
'define a string de conexão com a banco de dados que foi criado
ConnectionString = MontaStringConexaoSQLServer("Tabela")
Try
'cria e inicializa a string de conexão
Dim cn As SqlConnection = New SqlConnection(ConnectionString)
'define a consulta SQL selecionar os dados da tabela
Dim sql As String = "SELECT * FROM " & txtNomeTabela.Text
'cria comando na conexão para executar a consulta
cmd = New SqlCommand(sql, cn)
'define um dataadatper
da = New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "tabela")
lbDados.Items.Add("Dados da tabela " & txtNomeTabela.Text)
Dim dr As DataRow
For Each dr In ds.Tables(0).Rows
Dim i As Integer
For i = 1 To ds.Tables(0).Columns.Count
lbDados.Items.Add(dr(i - 1))
Next i
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
Finally
cmd.Connection.Close()
End Try
End Sub
|
Neste código usamos a instrução SQL : SELECT * FROM para selecionar todos os dados da tabela informada em txtNomeTabela.Text.
Usamos um DataSet para preencher em memória os dados obtidos e usamos um laço For Each para percorrer a tabela e exibir os registros.
Rodando o projeto e executando as operações iremos obter o seguinte resultado:
Eu procurei utilizar uma abordagem bem simples para facilitar o entendimento de quem esta começando agora com o VB .NET. Mas você pode melhorar o código criando uma classe para realizar essas operações e separar as resposabilidades removendo do formulário todo o código de acesso a dados segundo manda as boas práticas.
Pegue o projeto completo aqui : Vbnet_CriarDB.zip
(Disse Jesus) : Passará o céu e a terra, mas as minhas palavras não hão de passar. Lucas 21:33
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
Criar banco de dados via Código - Access , SQL Server - Macoratti
VB6 - Criando um banco de dados e tabelas no SQL Server (Sem ...
Criando Banco de dados , Tabelas , Stored Procedures e ... - Macoratti
C# - Criando Banco de dados, Tabelas e Acessando ... - Macoratti
VB .NET - Tratando com instâncias do SQL Server - Macoratti.net
VB .NET - Inserir, Selecionar, Atualizar e Deletar registros ... - Macoratti