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
...