Artigo SQL Magazine 22 - Dicas de performance com o ADO.NET

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

O objetivo deste artigo é esclarecer as melhores funcionalidades do ADO.NET.

capasql22.jpg

Clique aqui para ler todos os artigos desta edição

Dicas de performance com o ADO.NET

Renato Haddad

Trabalhar com banco de dados sempre foi uma funcionalidade interessante no tocante à forma de ler e pesquisar dados. Quando o ADO.NET surgiu, vi muitos desenvolvedores completamente perdidos sem saber qual é o tipo mais adequado de classe e qual método usar em determinada situação. O objetivo deste artigo é esclarecer as melhores funcionalidades do ADO.NET neste ponto. Mostrarei diversas formas de se pesquisar dados nas tabelas no Northwind do SQL Server, mas cabe ressaltar que a fonte de dados, ou seja, onde estão os dados é irrelevante, pois a classe é a mesma para todos, seja SQL Server, Oracle, Access, etc.

Execute Reader

O desenvolvedor sempre deve ter em mente: “Qual é a melhor forma de ler várias colunas de dados?”. Note que a pergunta está muito clara, ou seja, se refere apenas à leitura de várias colunas de dados. A resposta é: DataReader. O DataReader é a forma mais rápida de se ler dados em uma fonte de dados. Ela foi criada especialmente para esta finalidade. O que você deverá fazer é ler os dados e preencher o devido controle para exibi-los.

Para quem já trabalhou com Recordset, o DataReader é o que mais se aproxima disso, pois é somente forward-only e você não consegue lê-lo mais que uma vez, ou seja, uma vez lido já era. A performance é a melhor possível, pois você precisa apenas dos seguintes dados: uma conexão, um command (instrução SQL), método ExecuteReader.

Vamos a um exemplo. Abra o Visual Studio .NET 2003 e crie um novo projeto chamado ADONET do tipo Windows Forms, usando a linguagem Visual Basic .NET (poderia ser em C#, é apenas uma questão de sintaxe, aliás se você programa em C#, as classes e os métodos usados são idênticos, portanto, esteja à vontade quanto à linguagem).

Crie um novo formulário chamado DataReader com o seguinte layout (Figura 1), contendo: 3 Buttons e 1 ListBox (lstDados).

 

img1.jpg 

Figura 1. Layout do formulário DataReader.

 

Pressione F7 para exibir a janela de códigos e como iremos acessar o SQL Server, declare o devido namespace na lista de Imports na primeira linha da janela. Esta classe foi criada especialmente para o SQL Server versão 7.0 ou superior.

 

Imports System.Data.SqlClient

 

Em seguida, dentro da declaração da classe, declare uma variável chamada conexao para a conexão com o banco de dados. É importante ressaltar que você deverá ajustar esta string de conexão de acordo com a sua configuração, adicionando, se houver, password, segurança integrada, etc. Como aqui é apenas um artigo, deixei da forma mais simples possível.

 

Public Class DataReader

    Inherits System.Windows.Forms.Form

    Dim conexao As String = "Server=(local);Database=Northwind;user id=sa"

 

Em seguida, crie o código para o botão LerNomeCampo (btnLerNomeCampo) (ver Listagem 1). Note que existe um bloco de Try/Catch para tratar possíveis erros. Se ocorrer algum erro dentro do bloco do Try, então o mesmo é capturado dentro do Catch e é exibida a mensagem de erro.

 

Private Sub btnLerNomeCampo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLerNomeCampo.Click

    Try

        Dim conn As New SqlConnection(conexao)

        Dim sql As String = "Select CustomerID, CompanyName FROM Customers"

        Dim cmd As New SqlCommand(sql, conn)

        conn.Open()

        Dim reader As SqlDataReader = cmd.ExecuteReader()

        lstDados.Items.Clear()

        While reader.Read()

              lstDados.Items.Add(reader("CustomerID") + " - " + _reader("CompanyName"))

        End While

        reader.Close()

        conn.Close()

    Catch ex As SqlException

        MessageBox.Show(ex.Message)

    End Try

End Sub

Listagem 1. Código para o botão LerNomeCampo.

 

Veja a explicação detalhada. É definida a variável conn para instanciar a classe SqlConnection que recebe a string de conexão já definida acima.

 

        Dim conn As New SqlConnection(conexao)

 

É definida a instrução SQL e um Command, onde a variável cmd é o Command que irá executar exatamente o Sql da respectiva conexão. Em seguida, é aberta a conexão com o método Open.

 

        Dim sql As String = "Select CustomerID, CompanyName FROM Customers"

        Dim cmd As New SqlCommand(sql, conn)

        conn.Open()

 

Para montar um DataReader, basta instanciar uma variável com o objeto SqlDataReader e usar o método ExecuteReader. É exatamente neste momento que todos os dados contidos na instrução SQL vão para a memória e ficam armazenados no objeto reader. Isto ocorre apenas na memória.

 

      Dim reader As SqlDataReader = cmd.ExecuteReader()

 

Como iremos exibir os dados no ListBox lstDados, então, o mesmo é limpo e em seguida é montado um looping do tipo While que percorre todos os dados do DataReader Reader. Observe que não existe um método MoveNext, conforme tínhamos no Recordset, isto está encapsulado no método Read(). Observe como referenciar os campos do DataReader, ou seja, a primeira forma é através do próprio nome do campo (entre aspas “campo”). Apesar de não ser a forma mais rápida, é a mais indicada em muitas situações. A cada item lido, o mesmo é adicionado como um novo item no lstDados.

 "

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?