Desenvolvimento - Visual Basic .NET

VB.NET - Operações com dados que não retornam registros

Este artigo vai procurar tratar estes tipos de operações usando ADO.NET e mostrar como executá-las com SQL e os provedores gerenciados ADO.

por José Carlos Macoratti



Quando você trabalha com banco de dados muitas operações não retornam registros mas apenas uma indicação de falha ou sucesso na operação e o número de registros que foram afetados.

Este artigo vai procurar tratar estes tipos de operações usando ADO.NET e mostrar como executá-las com SQL e os provedores gerenciados ADO.

ADO.NET - Usando o objeto Command

O objeto Command da ADO.NET fornece o método ExecuteNonQuery para executar consultas que não retornam linhas (registros). Apesar de não retornar registros , qualquer parâmetro de saída ou valores retornados mapeados para parâmetros do objeto Comando são preenchidos com dados.

O método ExecuteNonQuery retorna o número de linhas afetados pelas operações de Insert , Update e Delete. Para todas as demais consultas o valor retornado é -1.

Quando uma consulta falha na execução o provedor gerenciado dispara uma exceção que você pode capturar no seu código.

Os provedores gerenciados ADO.NET possuem classes que fazem o tratamento das exceções. Esta classe de exceção é criada e disparada quando um erro é encontrado.

Executando comandos no SQL Server

No exemplo a seguir um instrução INSERT para incluir dados na tabela Categorias do banco de dados TesteWind é executada usando o método ExecuteNonQuery do objeto Command. O tratamento estruturado de exceções trata a exceção e fecha a conexão com o banco de dados:

Imports System.Data.SqlClient
Dim sqlConexao As SqlConnection
Dim sqlComando As SqlCommand
Dim registrosAfetados As Integer
Dim strConexao As String = "Server=(local);DataBase=TesteWind;User ID=;Password="

Try
  sqlConexao = New SQLConnection(strConexao)

  sqlComando = new SQLCommand()

  With sqlComando
    .CommandType = CommandType.Text
    .CommandText = "Insert Categorias (NomeDaCategoria,Descrição) Values ("Livros","Livros e 
artigos")"
    .Connection = sqlConexao
  End With

  sqlConexao.Open()

  registrosAfetados = sqlComando.ExecuteNonQuery()

Catch ex As Exception
    msgbox " Erro : " & ex.Message
Finally
   sqlConexao.close()
End Try

Executando comandos com a coleção Parameters

A coleção Parameters do objeto Command é usada para definir os argumentos do procedimento armazenado ou da consulta parametrizada. Embora você possa definir um procedimento armazenado e um parâmetro Input como um comando do tipo texto (Command Text), usando a coleção Parameters você simplifica a colocação dos parâmetros no local e formato correto. Os parâmetros do tipo string contendo caracteres aspas são automaticamente formatados.

O código a seguir cria um comando que executa o procedimento armazenado IncluiCategoria no banco de dados TesteWind no SQL Server.

Imports System.Data.SqlClient

Dim sqlConexao As SqlConnection
Dim sqlComando As SqlCommand
Dim registrosAfetados As Integer
Dim parametro As SqlParameter

Dim strConexao As String = "Server=(local);DataBase=TesteWind;User ID=;Password="

Try
 sqlConexao = New SQLConnection(strConexao)

 sqlComando = new SQLCommand()

 With sqlComando
  .CommandType = CommandType.StoredProcedure
  .CommandText = "IncluirCategoria"
  .Connection = sqlConexao
 End With

 parametro1 = sqlComando.Parameters.Add(New SQLParameter("@NomeCategoria",SQLDBType.NVarChar(16))

 With parametro1
  .Direction = ParameterDirection.Input
  .Value = "Livros"
 End With 

 parametro2 = sqlComando.Parameters.Add(New SQLParameter("@Descricao",SQLDBType.NVarChar(15))

 With parametro2
  .Direction = ParameterDirection.Input
  .Value = "Livros e artigos"
 End With 

 sqlConexao.Open()

 registrosAfetados = sqlComando.ExecuteNonQuery()

Catch ex As Exception
  msgbox " Erro " & ex.Message
Finally
  sqlConexao.Close()
End Try 

É claro que você deverá criar a stored procedure no SQL Server com o nome de IncluirCategorias. Abra o Enterprise Manager e expanda as ramificações e selecione o banco de dados TesteWind ; a seguir clique com o botão direito do mouse sobre o item Stored Procedure e na janela crie o procedimento armazenado parecido com :

CREATE PROCEDURE IncluirCategoria @NomeCategoria Varchar(15) , @Descricao VarChar(16)
AS 
Insert into Categorias (NomeDaCategoria,Descrição) Values (@NomeCategoria,@Descricao)

GO

Com isto podemos dizer que sempre que você for executar alguma operação que não retorne registros utilize o método ExecuteNonQuery do objeto Command para obter um melhor desempenho.

Até breve, e bons códigos .net para você...

José Carlos Macoratti

José Carlos Macoratti