Atenção: esse artigo tem uma palestra complementar. Clique e assista!
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).
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”.
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;
}
}
}
}
...