Windows Phone Mango e Microsoft SQL CE

Para armazenar e recuperar dados em um banco de dados local as aplicações Windows Phone utilizam LINQ to SQL. O LINQ to SQL é um recurso nativo do Framework 3.0 e foi um dos recursos que mais chamaram atenção no lançamento do Microsoft Visual Studio 2008. O LINQ to SQL, como já dito em outros posts, fornece mapeamento objeto-relacional entre a aplicação e bancos de dados relacionais, além disso é um recurso extremamente poderoso, que permite a construção de consultas utilizando sintaxe C# e VB.Net.

O Windows Phone Mango utiliza como base de dados o Microsoft SQL CE, versão compacta do famoso banco de dados Microsoft SQL, e própria para dispositivos móveis.

Aqui vamos apresentar o exemplo de uma aplicação que armazena e remove dados do banco de dados Microsoft SQL CE, utilizando como plataforma o Windows Phone Mango.

1o – Crie a aplicação utilizando o template Windows Phone Application.

2o – Ao ser perguntado sobre a versão da plataforma Windows Phone, selecione a opção Windows Phone OS 7.1.

3o – Dentro do projeto crie três pastas, sendo elas: DAO, Controller e Model.
windowsPhone01

4o – Faça referência a DLL System.Data.Linq.
windowsPhone02

5o – Dentro da pasta Model, criada anteriormente, crie a classe DataItem conforme a imagem a seguir.
windowsPhone03

6o – Adicione os atributos de mapeamento objeto-relacional LINQ para criar o mapeamento entre a classe e a tabela do banco de dados do Microsoft SQL CE. Faça referência ao namespace System.Data.Linq.Mapping.
windowsPhone04

7o – Dentro da pasta DAO crie uma classe chamada DataBaseContext, e a faça herda DataContext, classe presente no namespace System.Data.Linq. Esta classe será nosso data context e será responsável por fazer a ponte entre a aplicação e o banco de dados. Dentro da classe crie um atributo público chamado DataItems e que seja do tipo Table<DataItem>, este atributo representará nossa tabela no banco de dados. A classe DataBaseContext deverá se parecer com a seguinte implementação:
windowsPhone05

8o – Agora que temos nossa entidade e nosso data context, devemos criar uma classe que encapsule os comando com o banco de dados, por isso criaremos dentro da pasta DAO a classe DAOProvider. Esta classe representará nossa camada de acesso a dados e encapsulará os comandos feitos para o banco de dados. Nesta classe implementaremos quatro métodos, sendo eles: CreateDataBase, método que criará a base de dados; GetDataItems, método que retornará todos os dados que estiverem no banco de dados; Save, salva novos registros na base de dados; Remove, remove os dados do banco de dados. A implementação funcionará da seguinte forma:
windowsPhone06

9o – Para intermediar as chamadas entre a camada de visão e o repositório criaremos uma classe de controle que faça chamadas ao repositório. A vantagem de utilizar este tipo de classe é a possibilidade de encapsultar o repositório e poder adicionar filtros que intermediem o acesso aos dados do banco de dados. Esta classe deverá ser implementada como demonstrado a seguir:
windowsPhone07

10o – Finalmente vamos construir a interface do nosso aplicativo. Esta será uma interface bastante simples, deverão ser adicionados os seguintes itens: um textbox, um listbox e um botão (mais detalhes do layout poderão ser vistos no link para o download do exemplo, pois o layout do projeto não é o objetivo deste post).
windowsPhone08

11o – O único detalhe importante do layout é o modo como será feito o bind do listbox, pois na verdade ele será populado "na mão", isto é, os itens serão adicionados um-a-um (em um próximo post veremos como fazer isso de modo automático). Segue detalhe do XAML descrevendo o bind do listbox.
windowsPhone09

12o – A lógica da camada de visão deverá funcionar como o código apresentado a seguir. Como pode ser observado no código, ao clicar no botão Salvar um novo registro será incluso na base de dados, e ao clicar sobre qualquer item do listbox, o mesmo será removido do banco de dados.
windowsPhone10

Esta é uma introdução ao acesso a dados utilizando o Windows Phone e o Microsoft SQL CE. Espero que este post sirva como introdução para todos, e também espero que motive a construção de novos aplicativos para esta nova plataforma.

Para o download do exemplo acesse esse link: http://code.msdn.microsoft.com/Windows-Phone-Mango-e-SQL-81f15d55

[]s!

windowsPhone11

Publicidade

8 comentários sobre “Windows Phone Mango e Microsoft SQL CE

  1. Fernando,

    Não encontro de forma alguma a dll System.Data.Linq . Fiz diversas instalações hoje e não tive sucesso. Teve algum problema com isto? Já procurei por soluções e nada.

    • Grande Paulo,
      Olhei em máquina e a DLL esta no caminho “C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\system.data.linq.dll”

      Verifique se o mesmo ocorre na sua máquina.

      []s!

      • Não tem. Já verifiquei tanto da pasta que tem o x86 quanto a outra. Você pode enviar para mim as dlls? São 3:

        System.Data;
        System.Data.Linq;
        System.Data.Linq.Mapping;

        meu email é pcfviana arroba gmail ponto com

        Valeu

  2. Paulo,
    Acho que já sei qual o problema. Vc esta com o Windows Phone Developer Tools 7.0 instalado, e para fazer acesso ao SQL CE vc precisa ter instalado o Windows Phone Developer Tools 7.1.
    Assim vc conseguirá desenvolver para Windows Phone Mango. Tente validar essa instalação.
    []s!

  3. […] Os tipos de armazenamento existentes no Windows Phone são três: – Settings: armazenamento em estruturas de dados que funcionam como pares de chave/valor, assim como Dictionaries no .Net Framework (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx). – Files and Folders: acesso e armazenamento em estruturas de pastas restritas ao acesso de sua aplicação. – Relational Data: armazenamento de dados em bancos de dados locais, no caso SQL CE (como descrito neste post https://ferhenriquef.com/2011/10/17/windows-phone-mango-e-microsoft-sql-ce/) […]

  4. Tenho uma aplicação que possui uma coluna da tabela com vários valores, Gostaria de saber como eu poderia utilizar o comando SUM para calcular o total destes valores e me retornar o valor na tela xaml

    • Olá Angelina,
      Vc comentou que essa coluna contém vários valores. Fiquei em dúvida ao tipo dessa coluna.

      Mas, se ela for de um tipo númerico, vc pode fazer uma query com agrupamento e utilizar o operador SUM. Veja o exemplo abaixo:

      var query = from i in contexto.Tabela
      group i by i.CampoAgrupamento
      into temp
      select new {
      CampoAgrupamento = temp.Key,
      Numbers = temp.Sum(c => c.NomeCampoSoma) };

      []s e obrigado por postar!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.