Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Do que se trata o artigo

Introdução ao uso do Silverlight para desenvolvimento de web sites, bem como seus principais controles. Também é mostrado como criar um web service que fornecerá dados que serão utilizados no desenvolvimento de um aplicativo de demonstração que fará operações de consulta, exclusão, inclusão e alteração.


Para que serve

Desenvolvimento de aplicações web com interfaces ricas, que exploram o visual sem comprometer o desempenho da aplicação.

Em que situação o tema e útil

A criação de aplicações em Silverlight pode ser uma alternativa no desenvolvimento para web. Pode-se criar aplicações específicas como alguns módulos de ERP, por exemplo, resultando em aplicações poderosas, ricas e interativas, o que é chamado de RIA (Rich Internet Applications).

Resumo do DevMan

Silverlight 3.0 é uma nova luz no caminho dos desenvolvedores, onde os mundos web e Windows se aproximam ainda mais. Os termos mais utilizados quando o assunto é aplicação versus usuário são: interatividade, interfaces ricas, eficiência, entre outros. Neste artigo vamos explorar o que o Silverlight oferece para melhorar a usabilidade de aplicativos web desenvolvendo um pequeno, porém completo, exemplo de acesso e manutenção a dados.
Autores: Brenno Sant'Anna Scarpelini e Drausio Henrique Chiarotti

O Silverlight 3.0 permite criar aplicações web com interface rica, além de possibilitar o acesso a dados de forma assíncrona, o que permite a execução da aplicação enquanto se obtém dados. Neste artigo vamos construir uma aplicação simples, porém completa, que mostra as funcionalidades disponíveis. Vamos abordar o uso dos controles mais comuns como TextBox, ListBox, DataGrid e outros. Além disso também será construído um web service que irá popular esse DataGrid.

Nesta aplicação vamos partir do início, criaremos primeiramente o banco de dados, passaremos pelas regras de negócio e o desenvolvimento da interface em si. Tudo isso com o objetivo de que você, leitor, comece a utilizar hoje mesmo o Silverlight. Mas antes disso, certifique-se que tenha baixado os pacotes necessários para o Visual Studio 2008 no link “Get Started” (confira a seção de links no final do artigo).

Nota

O foco deste artigo é construir uma aplicação prática. Para uma introdução ao Silverlight, consulte a edição 64.

Criando o banco de dados

Neste projeto vamos utilizar o Microsoft SQL Server 2005. Crie uma tabela com o nome tblPessoa e adicione os campos IDPessoa, Nome, DataNascimento e Sexo, conforme a Listagem 1.

Listagem 1. Tabela Pessoa

CREATE TABLE [dbo].[tblPessoa](
 [IDPessoa] [int] IDENTITY(1,1) NOT NULL,
 [Nome] [varchar](100) NULL,
 [DataNascimento] [datetime] NULL,
 [Sexo] [bit] NULL,
 CONSTRAINT [PK_tblPessoa] 
 PRIMARY KEY CLUSTERED ([IDPessoa] ASC)
 WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]

Note que com os quatro campos poderemos utilizar controles do tipo TextBox para edição dos dados e um ListBox para trabalhar com o campo Sexo. O campo IDPessoa é autoincremento e será utilizado para controlar os registros.

Vamos agora criar dois procedimentos (Stored Procedures) que usaremos para acessar os dados da tabela. Crie os procedimentos das Listagens 2 e 3 na sua base de dados.

Listagem 2. Procedure de Cadastro

CREATE PROCEDURE uspCadastrarPessoa 
 @Excluir AS BIT = NULL,
 @IDPessoa AS INT = NULL,
 @Nome AS VARCHAR(100) = NULL,
 @DataNascimento AS DATETIME = NULL,
 @Sexo AS BIT = NULL
 AS
 BEGIN
 BEGIN TRY
   BEGIN TRAN
    IF(@Excluir = 1)
    BEGIN
     DELETE FROM tblPessoa
     WHERE IDPessoa = @IDPessoa
    END
    ELSE IF (@IDPessoa IS NULL)
    BEGIN
     INSERT INTO tblPessoa (
       Nome, DataNascimento, Sexo)
     VALUES (@Nome, @DataNascimento, @Sexo)
    END
    ELSE
    BEGIN
     UPDATE tblPessoa
     SET Nome = @Nome, 
     DataNascimento = @DataNascimento, Sexo = @Sexo
     WHERE IDPessoa = @IDPessoa
    END
   COMMIT TRAN
 END TRY
 BEGIN CATCH
   ROLLBACK TRAN
   SELECT ERROR_MESSAGE() AS Retorno
 END CATCH
 END

Listagem 3. Procedure de Consulta

CREATE PROCEDURE uspConsultarPessoa 
 @IDPessoa AS INT = NULL,
 @Nome AS VARCHAR(100) = NULL,
 @DataNascimento AS DATETIME = NULL,
 @Sexo AS BIT = NULL
 AS
 BEGIN
 SELECT
   IDPessoa, Nome, DataNascimento, Sexo,
   CASE WHEN Sexo = 0 THEN 'FEMININO' ELSE 'MASCULINO' END AS SexoDesc
 FROM
   tblPessoa
 WHERE      
   ((IDPessoa = @IDPessoa) OR (@IDPessoa IS NULL)) AND
   ((Nome LIKE '%' + @Nome + '%') OR (@Nome IS NULL)) AND
   ((DataNascimento = @DataNascimento) OR (@DataNascimento IS NULL)) AND
   ((Sexo = @Sexo) OR (@Sexo IS NULL)) AND
   ((@IDPessoa IS NOT NULL)OR(@Nome IS NOT NULL)OR(@DataNascimento IS NOT NULL)OR(@Sexo IS NOT NULL))
 END

O procedimento da Listagem 2 é responsável por inserir, alterar e excluir dados na tabela de pessoas. Este procedimento funciona da seguinte forma: é verificado se o parâmetro excluir é verdadeiro, então exclui-se o registro. Se não for exclusão, o parâmetro IDPessoa é verificado, e caso seja diferente de NULL a rotina de alteração é executada. E por fim, se for NULL, o registro será incluído.

O procedimento da Listagem 3 ilustra a consulta. Na consulta deve ser enviado pelo menos um dos quatro parâmetros e é retornada uma coleção onde cada registro contém o identificador da pessoa, o nome, a data de nascimento e o sexo. O interessante deste procedimento é que ele pode ser consultado por qualquer um dos quatro parâmetros.

Criando a solução

A solução (solution) é utilizada para agrupar projetos que estão relacionados e guardar as informações das dependências dos projetos que são utilizadas no processo de construção (build). Na nossa aplicação a solução será composta pelos projetos seguintes: acesso a dados, camada de negócios, objeto de transferência, aplicação Silverlight e o web site.

Para criar uma nova solução abra o Visual Studio 2008, acesse o menu “File/New” e então selecione “Project”. Será exibida a janela “New Project”. Localize “Project types”, clique sobre o item “Other Project Types” e então selecione o item “Visual Studio Solutions”. Em “Templates” selecione o item “Blank Solution”. Na parte inferior da janela altere a propriedade “Name” para “SolucaoSilverlight” e altere também a propriedade “Location” informando o local onde a solução será salva.

No Visual Studio, vá no menu View/Solution Explorer. Note que foi criada uma nova solução chamada “SolucaoSilverlight”, onde vamos adicionar nossos projetos.

Criando o projeto de acesso a dados

O primeiro projeto que vamos criar será uma biblioteca de classes (“Class Library”) chamada “AcessoDados”. Aqui é onde será implementada a interação com a base de dados, ou seja, é neste projeto que vamos inserir, alterar e excluir informações do banco de dados.

Para criar um novo projeto, abra a solução, acesse o menu “File/Add” e então selecione “New Project...”. Na janela “Add New Project” selecione o template “Class Library”, altere o campo “Name” para “AcessoDados” e na propriedade “Location” aponte para a pasta onde está sua solução.

Note que foi adicionado um novo projeto na solução, e que este projeto contém uma classe chamada “Class1.cs”. Clique com o botão direto na classe “Class1.cs” e selecione a opção “Delete” para excluir a classe. Vamos criar uma nova classe no projeto “AcessoDados”, portanto clique com o botão direito do mouse no projeto “AcessoDados” e vá até “Add/New Item...”. Na janela “Add New Item” selecione o template “Class”, altere o campo “Name” para “clsAcessoDados” e então clique em “Add”. Adicione o código da Listagem 4 na classe “clsAcessoDados”.

Nota

Para trabalhar com os recursos de dados, mais especificamente SQL Server, referencie os seguintes namespaces:

System.Data: provê acesso para classes que representam a arquitetura ADO.NET.

System.Data.SqlClient: é o provedor de dados (Data Provider) para SQL Server.

Listagem 4. Classe de acesso a dados

using System;
 using System.Data;
 using System.Data.SqlClient;
  
 namespace AcessoDados
 {
     public class clsAcessoDados
     {
         private SqlParameterCollection sqlParametros;
  
         public clsAcessoDados()
         {
             sqlParametros = new SqlCommand().Parameters;
         }
  
         private SqlConnection GetConnection()
         {
             
             return new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=Artigo;Integrated Security=True");
         }
  
         public void AdicionarParametro(SqlParameter sqlParameter)
         {
             sqlParametros.Add(sqlParameter);
         }
  
         public void LimparParametros()
         {
             sqlParametros.Clear();
         }
  
         private void SetarParametros(SqlCommand sqlCommand)
         {
             sqlCommand.Parameters.Clear();
             foreach (SqlParameter sqlParam in sqlParametros)
                 sqlCommand.Parameters.Add(new SqlParameter(sqlParam.ParameterName, sqlParam.Value));
         }
  
         public object ExecuteScalar(string strComando, CommandType cmdType)
         {
             using (SqlConnection sqlCon = GetConnection())
             {
                 sqlCon.Open();
                 SqlCommand sqlCommad = sqlCon.CreateCommand();
                 sqlCommad.CommandText = strComando;
                 sqlCommad.CommandType = cmdType;
                 sqlCommad.CommandTimeout = 7200;
                 SetarParametros(sqlCommad);
                 return sqlCommad.ExecuteScalar();
             }
         }
  
         public DataTable GetDataTable(String strComando, CommandType cmdType)
         {
             using (SqlConnection sqlCon = GetConnection())
             {
                 sqlCon.Open();
                 SqlCommand sqlCommad = sqlCon.CreateCommand();
                 sqlCommad.CommandText = strComando;
                 sqlCommad.CommandType = cmdType;
                 sqlCommad.CommandTimeout = 7200;
                 SetarParametros(sqlCommad);
                 SqlDataAdapter dtaDataAdapter = new SqlDataAdapter(sqlCommad);
                 DataTable dtbDataTable = new DataTable();
                 dtaDataAdapter.Fill(dtbDataTable);
                 return dtbDataTable;
             }
         }
     }
 }
 ... 

Quer ler esse conteúdo completo? Tenha acesso completo