msdn22-revista.jpg

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

 

Stored Procedures no .NET – parte II

por Cezar Guimarães Neto

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Preencher um DataGrid

·          Utilizar DataCommand e DataAdapter

·          Utilizar DataSet e DataReader

·          Utilizar Parâmetros

ADO.Net, SQL Server

 

Download:

UtilizandoSPs.zip (48KB)

Chapéu

Stored Procedure

ADO.Net

 

 

Stored procedure é um excelente recurso para utilizarmos em aplicações. Ela permite que uma série de comandos envolvendo a base de dados sejam encapsulados em um único comando na aplicação. Também permite otimizações que contribuem para a melhoria da performance da aplicação e ainda oferece benefícios de segurança. Estes são apenas alguns dos benefícios de utilizarmos Stored Procedures que vimos na primeira parte deste tutorial. Vimos também, como é simples criarmos e acessarmos procedures quando utilizamos os recursos do Visual Studio .Net. Neste artigo, veremos como podemos acessar as procedures nas aplicações com o .Net e o ADO.Net.

Preenchendo um DataGrid

Uma procedure pode retornar um ou mais resultados, dependendo do número de queries que ela contenha. É muito simples manipularmos o resultado de uma query ou de um conjunto de queries que sejam executados por uma procedure. Para isto, basta executarmos a procedure utilizando o DataAdapter para preencher os dados em um DataSet. Vejamos passo-a-passo como preencher um DataGrid com o resultado de um a query contida em uma procedure.

No Visual Studio, crie uma nova classe chamada UtilizaSP. Como vamos precisar da string de conexão em diversos métodos, crie uma variável privada para contê-la (sugiro utilizar _strConn). Altere o constructor da classe para ter um parâmetro tipo string para receber o nome do servidor. Desta maneira, será possível informar o nome do servidor SQL ao se instanciar a classe. No constructor da classe, faça a variável _strConn receber a string de conexão concatenada com o nome do servidor recebido no parâmetro de entrada. Assim como fizemos no primeiro artigo, utilizaremos a base Northwind que acompanha o SQL Server 2000.

 

//String de conexão

private string _strConn;

                       

public UtilizaSP(string server)

{

            //Monta a string de conexão com o nome do servidor.

            _strConn = "Initial Catalog=Northwind;Data Source="+ server +

                        ";Integrated Security=SSPI;";

}

 

Para este exemplo, utilizaremos a procedure Ten Most Expensive Products que retorna os 10 produtos mais caros. Crie um método chamado BuscaProdutosMaisCaros que retorna um DataSet.  Para utilizar as classe do ADO.Net é necessário que o projeto contenha as referências System.Data e System.Data.SqlClient.

 

using System.Data;

using System.Data.SqlClient;

 

No método, crie um novo DataSet _ds. Declare e instancie o SqlConnection chamado _conn . Um dos constructors desta classe recebe como parâmetro a string de conexão. Declare e instancie o SqlCommand,  chamado _comm, sem passar parâmetros. Nestes exemplos determinaremos os valores dos parâmetros através das propriedades. E por fim, declare e instancie o SqlDataAdapter chamado _adap. Um dos seus constructors recebe como parâmetro um SqlCommand. Informe o SqlCommand criado anteriormente (_comm). Para os que desenvolvem utilizando a linguagem C#, sugiro utilizar o using. Com isso, garantimos que o método Dispose seja executado no fim do bloco using. Os que usam outras linguagens devem fechar a conexão e executar o método Dispose das demais classes.

Para o SqlCommand  atribua o valor da propriedade CommandType com o tipo de StoredProcedure. Isto reduz o tempo de execução, pois torna desnecessário que o tipo de comando seja encontrado durante a execução. Atribua o valor da propriedade CommandText com o nome da procedure que utilizaremos e o valor da propriedade Connection  com o objeto de conexão _conn.

 Utilize o método Fill do SqlDataAdapter para carregar o resultado da procedure no DataSet criado (_ds). Então retorne o DataSet  _ds. O método deve ser semelhante ao encontrado na Listagem 1.

 

Listagem 1. Retorna DataSet com resultado de procedure

//Retorna um Dataset com produtos mais caros

public DataSet BuscaProdutosMaisCaros()

{

//Instancia o Dataset para retorno

            DataSet _ds =  new DataSet();

 

            //Declaração e instancia: Conexão, Command e DataAdapter

            using(SqlConnection _conn = new SqlConnection(_strConn))

            using(SqlCommand _comm =  new SqlCommand())

            using(SqlDataAdapter _adap =  new SqlDataAdapter(_comm))

            {

                        //Especifica o tipo do comando

...

Quer ler esse conteúdo completo? Tenha acesso completo