VB.NET - Brincando com Stored Procedures no SQL Server


 

Vamos brincar um pouco com storeds procedures no SQL Server ? Como brincar é uma das melhores formas de aprender você vai aprender brincando os seguintes conceitos neste artigo :

Quanta coisa , não é mesmo . Acompanhe o artigo e você nem vai perceber quando chegar ao final...

 

Iniciando a brincadeira

 

Para poder brincar você vai precisar ter o SQL Server instalado na sua máquina local. Você poderia também usar o servidor remoto gratuito que eu indiquei no artigo : ASP.NET - Servidor ASP.NET grátis com acesso a SQL Server  mas o código teria que ser adaptado para ASP.NET e então não vale.

 

A nossa brincadeira vai usar o banco de dados Northwind e as tabelas Orders e Customers.

 

Verifique se no seu SQL Server existe o banco de dados Northwind e as tabelas Orders e Customers. Você pode fazer isto usando o Enterprise Manager e verificar em seus bancos de dados e tabelas , conforme mostra a figura abaixo obtida para minha máquina local:

 

 

 

Vamos criar um projeto do tipo Windows Application com o nome de exemplo_sp . Nosso projeto possuirá 4 formulários e um módulo :

Abaixo temos a figura exibindo os arquivos da solução :

 

 

A brincadeira vai começar com a uma conexão ao SQL Server , afinal , sem isto não será possível ter acesso ao banco de dados nem as tabelas. Vamos definir a string de conexão e as variáveis objetos como publicas no arquivo de módulo pois assim elas ficaram visíveis por toda a aplicação.

 

O código do arquivo de modulo Modulo_sp.vb é dado abaixo :
 

Imports System.Data.SqlClient

Module Module_sp

Public con As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=."

'define as variáveis objeto para conexão , dataadapter , dataset e formulários
Public sqlcon As New SqlConnection(con)
Public da As New SqlDataAdapter
Public ds As DataSet
Public mdiFilho As New Form

End Module

 

Note que eu estou usando o namespace : System.Data.SqlClient pois vou fazer uma conexão com o SQL Server.

 

O formulário Menu.vb contém um menu de opções criado via controle MainMenu :

 

 

O código deste formulário é o seguinte :

 

Public Class Menu
Inherits System.Windows.Forms.Form

Private Sub Menu_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Application.Exit()
End Sub

'Cada opção de Menu estou criando uma instância de um formulário mdfilho e a seguir exibindo o formulário
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
    mdiFilho = New Cria_sp
    mdiFilho.MdiParent = Me
    mdiFilho.Show()
End Sub

Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
    mdiFilho = New Exclui_sp
    mdiFilho.MdiParent = Me
    mdiFilho.Show()
End Sub

Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
   mdiFilho = New Executa_sp
   mdiFilho.MdiParent = Me
   mdiFilho.Show()
End Sub

'encerra a aplicação
Private Sub MenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem6.Click
'atenção ao executar Application.exit() os eventos closing e closed do formulário não são executados
'se houver algum código nestes eventos que precisarem ser executados você deverá chamar o método form.close para cada
'formulário aberto antes de executar o método Exit
  
Application.Exit()
End Sub
End Class

 

Criando uma stored procedure no SQL Server

 

Vamos brincar de criar uma stored procedure no SQL Server. Isto será feito no formulário Cria_sp.vb

 

 

 

O código deste formulário é dado abaixo:

 

Imports System.Data.SqlClient

Public Class Cria_sp
Inherits System.Windows.Forms.Form


Dim txt_cria_sp As String

Private Sub Create_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

txt_cria_sp &= "CREATE PROCEDURE exemplo_de_stored_procedure" & vbCrLf
txt_cria_sp &= "@CustomerID nchar(5)" & vbCrLf
txt_cria_sp &= "AS" & vbCrLf
txt_cria_sp &= "SELECT c.CustomerID, c.CompanyName, o.OrderID, o.EmployeeID, o.ShipName from Customers c" & vbCrLf
txt_cria_sp &= "JOIN Orders o ON c.CustomerID= o.CustomerID" & vbCrLf
txt_cria_sp &= "WHERE c.CustomerID= @CustomerID" & vbCrLf & vbCrLf


TextBox1.Text = txt_cria_sp
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim cmd As New SqlCommand(txt_cria_sp, sqlcon)
sqlcon.Open()

Try
   cmd.ExecuteNonQuery()
   MsgBox("A stored procedure : exemplo_de_stored_procedure , foi criada com sucesso", MsgBoxStyle.Information,   Me.Text)
Catch sqlex As SqlException
    MsgBox(" Erro Numero : " & sqlex.Number & vbCrLf & " Erro Descrição : " & sqlex.Message & vbCrLf & " Erro na linha no : " & sqlex.LineNumber)
Catch exc As Exception
   MsgBox(exc.Message & " " & exc.StackTrace)
Finally
  sqlcon.Close()
End Try

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
   Me.Close()
End Sub
End Class

 

A nossa storede procedure recebeu o nome de : exemplo_de_stored_procedure e foi criada com o comando CREATE PROCEDURE conforme o seguinte código:

 

txt_cria_sp &= "CREATE PROCEDURE exemplo_de_stored_procedure" & vbCrLf
txt_cria_sp &= "@CustomerID nchar(5)" & vbCrLf
txt_cria_sp &= "AS" & vbCrLf
txt_cria_sp &= "SELECT c.CustomerID, c.CompanyName, o.OrderID, o.EmployeeID, o.ShipName from Customers c" & vbCrLf
txt_cria_sp &= "JOIN Orders o ON c.CustomerID= o.CustomerID" & vbCrLf
txt_cria_sp &= "WHERE c.CustomerID= @CustomerID" & vbCrLf & vbCrLf

 

Nela estou selecionando os clientes da tabela Customers que possuem pedidos na tabela Orders. O parâmetro de entrada será o CustomerID.

 

O tratamento de erro captura SQLException e Exception usando o bloco try/Catch/Finally. Observe que estou sempre fechando a conexão no bloco Finally. Lembre-se que este bloco sempre será executado.

 

Executando a stored procedure

 

O formulário Executa_sp , mostrado abaixo , contém o código que executa a stored procedure , preenche um dataset e exibe o resultado em um datagrid.

 

Ao lado o formulário exibindo o resultado da execução da stored procedure para o código do cliente - CustomerID - igual a ALFKI

 

O código do formulário é :

 

Public Class Executa_sp
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

Dim cmd As New SqlCommand("exemplo_de_stored_procedure", sqlcon)
da = New SqlDataAdapter(cmd)
ds = New DataSet

'definindo o parâmetro : nome , tipo , valor
Dim input As New SqlParameter

With input
  .ParameterName = "@CustomerID"
  .SqlDbType = SqlDbType.NChar
  .Value = TextBox1.Text
End With

'definindo o comando : o tipo de parâmetro (entra/saida) e o tipo  de comando.
With cmd
   .Parameters.Add(input)
   .CommandType = CommandType.StoredProcedure
End With

'preenche o dataset com os dados da sp
da.Fill(ds, "exemplo_de_stored_procedure")

'vincula a tabela gerada ao datagrid
DataGrid1.DataSource = ds.Tables(0)

'exibe o número de registros selecionados
With ds.Tables("exemplo_de_stored_procedure")
   MsgBox(.DefaultView.Count.ToString() & " registro(s) localizado(s) !", MsgBoxStyle.Information, Me.Text)
   TextBox1.Focus()
End With

Catch sqlex As SqlException
   MsgBox(" Erro Numero : " & sqlex.Number & vbCrLf & " Erro Descrição : " & sqlex.Message & vbCrLf & " Erro na linha no : " &    sqlex.LineNumber)
Catch exc As Exception
   MsgBox(exc.Message)
End Try

End Sub

End Class

 

Excluindo a stored Procedure

 

Para terminar a brincadeira vamos a formulário que exclui a stored procedure : Exclui_sp.

 

 

Seu código é dado a seguir:

 

Imports System.Data.SqlClient

Public Class Exclui_sp
Inherits System.Windows.Forms.Form

Dim txt_excluir_sp As String

Private Sub Drop_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Clear()

txt_excluir_sp &= "DROP PROCEDURE exemplo_de_stored_procedure"

TextBox1.Text = txt_excluir_sp
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim cmd As New SqlCommand(txt_excluir_sp, sqlcon)
sqlcon.Open()

Try
   cmd.ExecuteNonQuery()
   MsgBox("A Stored Procedure 'exemplo_de_stored_procedure' foi excluida do SQL Server.", MsgBoxStyle.Information, Me.Text)
Catch sqlex As SqlException
   MsgBox(" Erro Numero : " & sqlex.Number & vbCrLf & " Erro Descrição : " & sqlex.Message & vbCrLf & " Erro na linha no : " & sqlex.LineNumber)
Catch exc As Exception
   MsgBox(exc.Message)
Finally
   sqlcon.Close()
End Try

End Sub
End Class

 

A exclusão da stored procedure é feita pelo comando DROP PROCEDURE conforme abaixo:

 

txt_excluir_sp &= "DROP PROCEDURE exemplo_de_stored_procedure"

 

Em todos os formulários com exceção do Menu.vb temos o botão Sair cujo código é :

 

Me.Close()

 

E acabou a brincadeira , até a próxima ...

 


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti