VB.NET - Usando stored procedures

Os procedimentos armazenados são como pequenos programas em miniaturas que ficam 'dentro' do banco de dados prontos para serem usados. Geralmente uma stored procedure(sp) consiste em instruções SQL que realizam tarefas como selecionar , inclui , alterar e excluir dados.

Para saber mais sobre stored procedures leia os artigos :

  1. ADO - Usando Procedimentos Armazenados ( Stored Procedures )
  2. Usando Procedimentos Armazenados - II

Neste artigo vou mostrar como podemos acessar e usar uma stored procedure no SQL Server via VB .NET. Vou usar o banco de dados Teste e a tabela Clientes. A idéia é criar um sp que selecione os registros da tabela Clientes para qual o campo cidade for igual a cidade que iremos informar como parâmetro.(recebido de uma combobox) : Select CódigoDoCliente , NomeDaEmpresa , NomeDoContato , Endereço, Cidade from Clientes Where Cidade like "%" + @cidade + "%"

Nota: Na utilização de parâmetros podemos estabelecer uma ligação entre a stored procedure e o ambiente externo. Eles podem ser considerados como de entrada (input) quando recebem dados do programa mas se usarmos a palavra Output na definição do parâmetro ela pode retornar o valor atual do parâmetro para o programa que a chamou.

Vou cria a stored procedure no SQL Server usando o Enterprise Manager. Siga o roteiro :

  1. Inicie o Enterprise Manager
  2. Expanda a árvores de objetos até visualizar os banco de dados do sistema
  3. Expanda o Banco de dados no qual você deseja criar a stored procedure.(No meu caso o banco de dados Teste)
  4. Selecione a opção - Stored Procedures
  5. Clique com o botão direito do mouse e selecione - New Stored Procedure
  6. A tela da figura abaixo irá surgir , a seguir basta digitar o código relativo a sp que deverá ser criada

A nossa sp será bem simples e aceitará um parâmetro  - @cidade - que será passada para a consulta. Vou chamar a sp de : SelecionaClientesPorCidade e tem o seguinte código:

Acima temos a nossa sp criada na relação de stored procedures do SQL Server.

Nossa próxima etapa será mostrar como usar a stored procedure criada no banco de dados Teste. Uma das vantagens em utilizar uma sp é que ela é pré-compilada antes de ser armazenada como um objeto no banco de dados.

Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : SQLServer_SP
  4. Location : c:\vbnet \SQLServer_SP

No formulário padrão insira os seguintes componentes : um DataGrid - DataGrid1 - , um combobox - combobox1 , um label -label1, um button - button1; conforme veja figura abaixo.

No evento Load do formulário - form1.vb - vamos colocar o código que irá carregar a combobox com algumas opções de cidades para o usuário selecionar:

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

   ComboBox1.Items.Add("São Paulo")

   ComboBox1.Items.Add("Madrid")

   ComboBox1.Items.Add("London")

   ComboBox1.Items.Add("Berlin")

   ComboBox1.Items.Add("Buenos Aires")

   ComboBox1.Items.Add("Barcelona")

   'seleciona a primeira opção

   ComboBox1.SelectedIndex = 0

End Sub

A seguir no evento click do botão  de comando - button1 -vamos colocar o código que irá executar a nossa stored procedure:

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

 

   Dim ds_sp As DataSet

   Dim conexao As SqlConnection

   Dim da_sp As SqlDataAdapter

 

If ComboBox1.SelectedItem <> "" Then

    'cria a conexão com o banco de dados Teste

    conexao = New SqlConnection("server=(local);Trusted_Connection=yes;database=Teste")

 

    da_sp = New SqlDataAdapter("SelecionaClientesPorCidade", conexao)

    'define o tipo stored procedure

    da_sp.SelectCommand.CommandType = CommandType.StoredProcedure

    'define o tipo de dados do parâmetro a ser recebido

    da_sp.SelectCommand.Parameters.Add(New SqlParameter("@cidade", SqlDbType.VarChar, 30))

    'recebe o parâmetro selecionado na combobox

    da_sp.SelectCommand.Parameters("@cidade").Value = Trim(ComboBox1.SelectedItem)

 

    ds_sp = New DataSet()

    'preenche o dataset com os dados da sp

    da_sp.Fill(ds_sp, "SelecionaClientesPorCidade")

 

    'exibe os dados no datagrid

    DataGrid1.DataSource = ds_sp.Tables("SelecionaClientesPorCidade").DefaultView

 

    da_sp.Dispose()

    conexao.Close()

Else

    MsgBox("Informe um nome de cidade válido ! ", MsgBoxStyle.Critical)

End If

End Sub

No código acima eu estou usando um objeto DataSet para receber os dados via DataAdapter e exibí-los em um DataGrid.

Ao executar o projeto e selecionar uma cidade , clicando a seguir no botão de comando teremos a seleção dos dados conforme definido na stored procedure:

Simples , não é mesmo ???  Mas e seu eu quiser criar a stored procedure via código ?  Como vou fazer isto ?

Vamos excluir a stored procedure -SelecionaClientesPorCidade  - criada no banco de dados Teste e a seguir vamos usar um código VB.NET para criar a mesma stored procedure. Para criarmos a storede procedure vamos ter que verificar se ela já existe no banco de dados.

No projeto anterior vamos incluir um botão de comando - button2 - no formulário  e no evento Click vamos incluir o seguinte código que irá criar a stored procedure:

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

Dim conexao As SqlConnection

Dim comando As SqlCommand

Dim dr_cria_sp As SqlDataReader

 

conexao = New SqlConnection("server=(local);Trusted_Connection=yes;database=Teste")

 

comando = New SqlCommand("select * from sysobjects where name ='SelecionaClientesPorCidade' and sysstat & 0xf=4", conexao)

 

comando.CommandType = CommandType.Text

comando.Connection.Open()

 

dr_cria_sp = comando.ExecuteReader

 

If Not dr_cria_sp.Read Then

   comando.CommandText = "CREATE PROCEDURE SelecionaClientesPorCidade(@cidade varchar(30))" & _

                                      " AS" & _

                                      " Select CódigoDoCliente , NomeDaEmpresa , Cidade from Clientes" & _

                                      " Where Cidade like @cidade"

 

  dr_cria_sp.Close()

  comando.ExecuteNonQuery()

  MsgBox(" A stored procedure foi criada com sucesso !", MsgBoxStyle.Critical)

Else

  dr_cria_sp.Close()

  MsgBox(" A stored procedure já existe no banco de dados !", MsgBoxStyle.Critical)

End If

 

comando.Dispose()

conexao.Close()

End Sub

Estamos usando o objeto DataReader para criar a stored procedure via código; a linha de código :

comando = New SqlCommand("select * from sysobjects where name ='SelecionaClientesPorCidade' and sysstat & 0xf=4", conexao)

verifica se  stored procedure já existe no banco de dados , e , o código abaixo :

   comando.CommandText = "CREATE PROCEDURE SelecionaClientesPorCidade(@cidade varchar(30))" & _

                                      " AS" & _

                                      " Select CódigoDoCliente , NomeDaEmpresa , Cidade from Clientes" & _

                                      " Where Cidade like @cidade"

 

cria a stored procedure no banco de dados Teste , conforme indica a mensagem exibida pelo aplicativo:

Após criar a stored procedure basta verificar se ela esta funcionando e acionar o código do botão - Executa Stored Procedure. Você vai ver que funciona...

Na continuação deste artigo vou falar sobre stored procedures no Access 2000 (é isto mesmo, no Access 2000) , até lá ...


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