VB .NET - Criando um Banco de dados SQL Server, Tabela, Stored Procedure e View via código
Este artigo mostra como criar um banco de dados, tabela, Stored Procedure , View no SQL Server e também como preencher a tabela com dados via código usando a linguagem VB .NET. |
Neste artigo vamos criar uma aplicação VB .NET que vai criar de forma automática e via código um banco de dados no SQL Server, uma tabela, uma Store Procedure, uma View e no fim preencher a tabela com dados exibindo-os em controle DataGridView.
Recursos Usados
Criando projeto no VS 2017
Abra o VS 2017 Community e crie um novo projeto usando a linguagem Visual Basic e o template Windows Classic Desktop -> Windows Forms App(.NET Framework) com o nome CriaBancoDados:
Após criar o projeto inclua um novo formulário no projeto via menu Project-> Add Windows Forms com o nome Status. Assim o projeto deverá possuir a seguinte estrutura:
O formulário Form1.vb será o formulário principal e o formulário Status.vb será usado para exibir mensagens de status das operações realizadas na aplicação.
Configurando o ambiente : definindo as variáveis usadas no projeto
Neste projeto iremos acessar o banco de dados SQL Server para poder criar um banco de dados, tabela, stored procedure e view.
Dessa forma temos que definir a string de conexão com o banco de dados e o melhor local para fazer isso seria o arquivo App.Config, mas para variar eu vou definir as variáveis usadas no projeto no formulário Form1.vb.
Para tornar o código mais fácil de ler vou usar o recurso #Region/#End Region que permite agrupar código e assim organizar por seções o código do projeto.
Veja como o código fica mais legível após criarmos cada seção no formulário usando #Region:
Inclua os seguintes namespaces no início do formulário :
Imports System.Data.SqlClient
Imports System.Data
Agora na primeira #Region do formulário definimos as variáveis usadas no projeto :
' Inicializa as constantes para conexão com o banco de dados
' e exibe o erro de conexão ao usuário se houver
#Region "Define variáveis usadas no projeto"
Protected Const SqlConnectionString As String =
"Server=(local);" & _
"DataBase=;" & _
"Integrated Security=SSPI"
Protected Const MensagemErroConexao As String = _
"Para executar este exemplo você tem que ter o SQL Server " & _
"instalado. Para " & _
"instruções de instalação veja o arquivo de documentação."
Protected JaEstaConectado As Boolean = False
Protected JaCriouTabela As Boolean = False
Protected connectionString As String = SqlConnectionString
#End Region
|
Definindo a interface do formulário Form1.vb
No formulário Form1.vb vamos incluir a partir da ToolBox:
Definindo a interface do formulário Status.vb
No formulário Status.vb vamos incluir apenas um controle Label - Label1
E vamos definir o seguinte código neste formulário:
Public Class Status
Public Overloads Sub Show(ByVal Mensagem As String)
Label1.Text = Mensagem
Me.Show()
Application.DoEvents()
End Sub
End Class
|
Aqui sobrescrevemos o método Show para exibir mensagens na Label do formulário.
Pronto. Isso é tudo o que o formulário Status vai fazer.
Agora veremos o código implementado no formulário Form1.vb. Como ele esta comentado só vou tecer explicações quando for pertinente.
Código do evento Load
#Region "Form load"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ResetarUI()
Me.Height = 310
Me.Width = 547
End Sub
#End Region
|
Reseta a interface como usuário e define o tamanho inicial do formulário Form1.vb.
Código do método ResetarUI()
#Region "Resetar UI"
' Define a interface com o usuário
Private Sub ResetarUI()
lblSeta1.Visible = False
lblPasso2.Enabled = False
btnCriarTabela.Enabled = False
lblSeta2.Visible = False
lblPasso3.Enabled = False
btnCriarSP.Enabled = False
lblSeta3.Visible = False
lblPasso4.Enabled = False
btnCriarView.Enabled = False
lblSeta4.Visible = False
lblPasso5.Enabled = False
btnPopularTabela.Enabled = False
lblSeta5.Visible = False
lblPasso6.Enabled = False
btnExibirDados.Enabled = False
With dgvDados
.Visible = False
.DataSource = Nothing
End With
End Sub
#End Region
|
Criando o banco de dados TesteDB
#Region "Criar banco de dados"
Private Sub btnCriarDB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCriarDB.Click
' Se o botão Criar Tabela esta habilitado então o usuário tentou recriar o banco de dados novamente
' e ele é alertado sobre isso
If btnCriarTabela.Enabled Then
Dim dr As DialogResult = MessageBox.Show("Recriando o banco de dadaos " &
"irá desfazer os outros passos da criação do objeto banco de dados realizados " &
". Deseja continuar ?", "Re-Criação do Banco de dados " &
"Alerta", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
If dr = Windows.Forms.DialogResult.Yes Then
ResetarUI()
CriarBancoDados()
End If
Else
CriarBancoDados()
End If
End Sub
' Executa uma instrução SQL que deleta o banco de dados se existir e então o recria
Private Sub CriarBancoDados()
Dim sqlStatement As String = _
"IF EXISTS (" & _
"SELECT * " & _
"FROM master.dbo.sysdatabases " & _
"WHERE Name = 'TesteDB' )" & vbCrLf & _
"DROP DATABASE TesteDB" & vbCrLf & _
"CREATE DATABASE TesteDB"
' Exibe uma mensagem de status sobre a conexão
Dim statusForm As New Status()
If Not JaEstaConectado Then
statusForm.Show("Se conectando ao SQL Server...")
End If
' Tenta se conectar com uma instância do SQL Server
Try
' A classe SqlConnection permite se conectar com o SQL Server.
' O construtor aceita a string de conexão como um argumento
' Ela usa Integrated Security, que significa que voce
' precisa ter um login no SQL Server, ou ser parte do grupo Administrator
Dim connection As New SqlConnection(connectionString)
' Um objeto SqlCommand é usando para executar comandos SQL
Dim cmd As New SqlCommand(sqlStatement, connection)
' Abra a conexão , executa o comando e fecha a conexao
' Usar ExecuteNonQuery é mais eficiente quando não temos dados retornados
connection.Open()
cmd.ExecuteNonQuery()
connection.Close()
' Dados submetidos com sucesso
JaEstaConectado = True
JaCriouTabela = True
statusForm.Close()
' Exibe os controles para próximo passo
lblSeta1.Visible = True
lblPasso2.Enabled = True
btnCriarTabela.Enabled = True
MsgBox("Banco de dados TesteDB criado com sucesso.", MsgBoxStyle.OkOnly, "Status da Criação do Banco de dados")
Catch sqlExc As SqlException
MsgBox(sqlExc.Message, MsgBoxStyle.OkOnly, "Erro SQL Exception")
Catch exc As Exception
' Não foi possível se conectar como SQL Server ou MSDE
statusForm.Close()
MsgBox(exc.Message, MsgBoxStyle.OkOnly, "A conexão falhou...")
End Try
End Sub
|
Nesta região temos o código do evento Click do botão Criar Banco de dados que chama o método CriarBancoDados que cria o banco de dados TesteDB no SQL Server.
Criando a tabela Contato
#Region "Criar tabela"
Private Sub btnCriarTabela_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCriarTabela.Click
'define a instrução SQL usada
Dim strSQL As String = _
"USE TesteDB" & vbCrLf & _
"IF EXISTS (" & _
"SELECT * " & _
"FROM TesteDB.dbo.sysobjects " & _
"WHERE Name = 'Contato' " & _
"AND TYPE = 'u')" & vbCrLf & _
"BEGIN" & vbCrLf & _
"DROP TABLE TesteDB.dbo.Contato" & vbCrLf & _
"END" & vbCrLf & _
"CREATE TABLE Contato (" & _
"ContatoID Int NOT NULL," & _
"Nome NVarChar(40) NOT NULL," & _
"Sobrenome NVarChar(40) NOT NULL," & _
"Endereco NVarChar(100) NOT NULL" & ")"
Try
' A classe SqlConnection permite se comunicar com o SQL Server.
' O construtor aceita uma string de conexão como argumento.
' Ela usa a Integrated Security, que significa que você tem que ter um login com o SQL Server
' ou fazer parte do grupo Administrators
Dim dbConnection As New SqlConnection(connectionString)
' Um objeto SqlCommand é usado para executar comandos SQL
Dim cmd As New SqlCommand(strSQL, dbConnection)
' Abre a conexão, executa o comando e fecha a conexão
' Usa ExecuteNonQuery pois não retorna dados
dbConnection.Open()
cmd.ExecuteNonQuery()
dbConnection.Close()
' Exibe os controles para proximo passo
lblSeta2.Visible = True
lblPasso3.Enabled = True
btnCriarSP.Enabled = True
MessageBox.Show("Tabela 'Contato' criada com sucesso.",
"Status da criação da Tabela",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
#End Region
|
Este código cria a tabela Contato contendo os campos : ContatoID, Nome, Sobrenome e Endereco.
Criando a Stored Procedure AdicionaContatos
#Region "Criar stored procedure"
'Aqui execuamos duas instruções SQL; uma que exlcui a Procedure se ela existir e outra que cria a procedure
Private Sub btnCriarSP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCriarSP.Click
Dim dbConnection As New SqlConnection(connectionString)
Dim strSQL As String = _
"USE TesteDB" & vbCrLf & _
"IF EXISTS (" & _
"SELECT * " & _
"FROM TesteDB.dbo.sysobjects " & _
"WHERE Name = 'AdicionaContatos' " & _
"AND TYPE = 'p')" & vbCrLf & _
"BEGIN" & vbCrLf & _
"DROP PROCEDURE AdicionaContatos" & vbCrLf & _
"END"
Dim cmd As New SqlCommand(strSQL, dbConnection)
Try
dbConnection.Open()
cmd.ExecuteNonQuery()
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Try
cmd.CommandText = _
"CREATE PROCEDURE AdicionaContatos AS" & vbCrLf & _
"INSERT INTO Contato" & vbCrLf & _
"(ContatoID, Nome, Sobrenome, Endereco)" & _
"SELECT EmployeeID, FirstName, LastName, Address " & _
"FROM Northwind.dbo.Employees"
cmd.ExecuteNonQuery()
dbConnection.Close()
lblSeta3.Visible = True
lblPasso4.Enabled = True
btnCriarView.Enabled = True
MessageBox.Show("Stored Procedure 'AdicionaContatos' criada " &
"com sucesso", "Status da Criação da Stored Procedure",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
#End Region
|
Neste código criamos a stored procedure AdicionaContatos e inserimos dados na tabela Contato a partir da tabela Employees do banco de dados Northwind.mdf.
Criando a View GetContatos
#Region "Criar view"
'aqui executamos duas instruções SQL uma que exclui a View se ela existir e outra que cria a View
Private Sub btnCriarView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCriarView.Click
Dim dbConnection As New SqlConnection(connectionString)
Dim strSQL As String = _
"USE TesteDB" & vbCrLf & _
"IF EXISTS (" & _
"SELECT * " & _
"FROM TesteDB.dbo.sysobjects " & _
"WHERE Name = 'GetContatos' " & _
"AND TYPE = 'v')" & vbCrLf & _
"BEGIN" & vbCrLf & _
"DROP VIEW GetContatos" & vbCrLf & _
"END"
Dim cmd As New SqlCommand(strSQL, dbConnection)
Try
dbConnection.Open()
cmd.ExecuteNonQuery()
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Try
' Altera a instrução SQL para a proxima query
cmd.CommandText = _
"CREATE VIEW GetContatos AS " & _
"SELECT * " & _
"FROM Contato"
cmd.ExecuteNonQuery()
dbConnection.Close()
lblSeta4.Visible = True
lblPasso5.Enabled = True
btnPopularTabela.Enabled = True
MessageBox.Show("View 'GetContatos' criada com " &
"sucesso.", "Status da criação da SQL View",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
#End Region
|
Populando a tabela Contato
#Region "Popular tabela"
'Executa a stored procedure que preenche a tabela Contato com informações do banco de dados Northwind
Private Sub btnPopularTabela_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPopularTabela.Click
Dim strSQL As String = "EXECUTE TesteDB.dbo.AdicionaContatos"
Try
Dim dbConnection As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(strSQL, dbConnection)
dbConnection.Open()
cmd.ExecuteNonQuery()
dbConnection.Close()
lblSeta5.Visible = True
lblPasso6.Enabled = True
btnExibirDados.Enabled = True
MessageBox.Show("Tabela populada com sucesso.",
"Status da Adição de Dadaos",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
#End Region
|
Executamos a stored procedure AdicionaContatos criada que vai preencher a tabela Contato com dados da tabela Employees do Northwind.
Exibindo os dados no DataGridView
#Region "Exibir Dados"
' Pega as informações a partir da tabela Contato e poe no DataSet que usado para se vincular o DataGridView
Private Sub btnExibirDados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExibirDados.Click
If IsNothing(dgvDados.DataSource) Then
Me.Height = 650
Dim strSQL As String = _
"USE TesteDB" & vbCrLf & _
"SELECT * " & _
"FROM GetContatos"
Try
Dim dbConnection As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(strSQL, dbConnection)
' O SqlDataAdapter usa o objeto SqlCommand para preencher o DataSet
Dim da As New SqlDataAdapter(cmd)
Dim dsContatos As New DataSet()
da.Fill(dsContatos, "Contato")
'configura o datagridview definindo as cores de fundo e frente, a fonte, e outros recursos
With Me.dgvDados
.Visible = True
.AutoGenerateColumns = False
.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender
.BackColor = Color.WhiteSmoke
.ForeColor = Color.MidnightBlue
.CellBorderStyle = DataGridViewCellBorderStyle.None
.ColumnHeadersDefaultCellStyle.Font = New Font("Tahoma", 8.0!, FontStyle.Bold)
.ColumnHeadersDefaultCellStyle.BackColor = Color.MidnightBlue
.ColumnHeadersDefaultCellStyle.ForeColor = Color.WhiteSmoke
.DefaultCellStyle.ForeColor = Color.MidnightBlue
.DefaultCellStyle.BackColor = Color.WhiteSmoke
End With
'define as colunas no grid
Me.dgvDados.DataSource = dsContatos.Tables(0)
Dim newColumn As Integer = Me.dgvDados.Columns.Add("ContatoID", "Contato ID")
Me.dgvDados.Columns(newColumn).DataPropertyName = "ContatoID"
newColumn = Me.dgvDados.Columns.Add("Nome", "Nome")
Me.dgvDados.Columns(newColumn).DataPropertyName = "Nome"
newColumn = Me.dgvDados.Columns.Add("Sobrenome", "Sobrenome")
Me.dgvDados.Columns(newColumn).DataPropertyName = "Sobrenome"
newColumn = Me.dgvDados.Columns.Add("Endereco", "Endereço")
Me.dgvDados.Columns(newColumn).DataPropertyName = "Endereco"
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "Erro SQL Exception!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub
#End Region
|
Encerrar Programa
#Region "Encerra Programa"
Private Sub exitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitToolStripMenuItem.Click
Me.Close()
End Sub
#End Region
|
Executando o projeto iremos obter o seguinte resultado:
Neste projeto usamos instruções SQL para criar os objetos do banco de dados SQL Server. Vimos que é possível fazer isso via código.
Embora o projeto funcione ele possui grandes limitações que você poderá corrigir e melhorar:
Pegue o codigo completo aqui : CriarBancoDados.zip
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 ?
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - Criando Banco de dados, Tabelas e Acessando ... - Macoratti.net
Criar banco de dados via Código - Access , SQL Server - Macoratti.net
VB .NET - Acessando um banco de dados Access ... - Macoratti.net