sábado, octubre 15, 2011

[WP7] Bases de datos Locales en Windows Phone 7.5 (I)

Hola a todo@s nuevamente,

 

Hoy quiero compartir con ustedes como es el proceso para generar el contexto que se utiliza para utilizar bases de datos locales en Windows Phone 7.5.

 

Crear Contexto de datos para Bases de datos Locales en Windows Phone 7.5

 

Es necesario indicar que los motores de bases de datos que podemos utilizar locales en Windows Phone 7.5 son:

  • Microsoft SQL Server Mobile (Algunos lo siguen llamando Compact Edition)
  • SQLite

 

Debemos crear un contexto de datos (DataContext) para poder tener acceso a la base de datos local en Windows Phone 7.5 conocido también como Windows Phone Mango, aquí es necesario aclarar, que no podemos utilizar ADO.NET de manera directa para este acceso a la base de datos local en el dispositivo.

 

Por la razón anterior debemos crear un contexto de datos de la base de datos a utilizar en nuestro desarrollo para Windows Phone 7.5, este DataContext, no es mas que una clase en uno de los lenguajes de la plataforma .NET (VB.NET o C#), en la cual se encuentran métodos que permiten las operaciones CRUD, clases de tipo entidad que representan un registro de cada una de las tablas, clases de tipo colección que representan la tabla o un conjunto de registros de la tabla.

 

Para muchos de los que venimos del mundo de Windows Mobile, desarrollo ASP.NET o Windows Forms es un cambio brusco, ya que estábamos acostumbrados a tener todo controlado desde ADO.NET.

 

La razón principal de la reflexión anterior es que al no tener el manejo de las operaciones de la base de datos a través de ADO.NET las cosas como que se nos complican. Sin embargo, el manejo de las operaciones de la base de datos locales en Windows Phone 7.5 se realiza a través de LinQ y un DataContext, este DataContext es el que vamos a aprender a construir en este post.

 

Algo que debemos tener claro es que nuestra base de datos local de SQL Server Mobile se almacena en el almacenamiento privado del dispositivo, esto es lo que conocemos como “Isolated Storage”.

 

image

En la imagen anterior podemos observar como se almacena nuestra base de datos en el Isolated Storage y que a través de LINQ to SQL nos comunicamos con ella utilizando el DataContext desde nuestra aplicación de Windows Phone 7.5.

 

La clase DataContext

Esta es una clase que contiene de todas las operaciones CRUD (Create, Read, Update, Delete) basada en la base de datos para realizar operaciones sobre la Base de Datos. En la cual utilizando LINQ to SQL accedemos a todas las operaciones que necesitemos realizar sobre la base de datos.

 

 

Muy bien, ya teniendo claro todo lo anterior, lo primero que debemos hacer es definir el modelo de datos en nuestra base de datos SQL Mobile, para esto vamos a utilizar SQL Server Management Studio para crear la base de datos y la estructura de las tablas de nuestra base de datos.

Si se preguntan si podemos utilizar Entity Framework 4.1 para realizar esta operación, la respuesta es SI, lo importante es definir el modelo de nuestro repositorio de datos y generar el archivo .SDF de la base de datos SQL Server Mobile.

 

Ahora vamos a mostrar como crear una base de datos desde el SQL Server Management Studio, al iniciar esta aplicación nos vamos a encontrar con la siguiente pantalla:

 

image

En el tipo de Servidor vamos a abrir la lista de selección y seleccionar SQL Server Compact, con esto nos aseguramos crear la base de datos que podemos utilizar en Windows Phone 7.5.

 

Al seleccionar el tipo de base de datos, seleccionamos en el archivo de la base de datos, para crear nuestra base de datos SQL Server Compact:

image

 

Vamos a crear una nueva base de datos, entonces de la lista que nos muestra, que son las bases de datos que hayamos utilizado, vamos a seleccionar la opción <New Database…> para crear una nueva base de datos.

 

Esta acción nos abre una nueva pantalla en la cual podemos darle un nombre a nuestra base de datos, colocarle un nombre, etc.

image

Como observamos podemos seleccionar la ruta y colocar el nombre de la base de datos .SDF que vamos a crear, esto lo hacemos en el primer cuadro de texto de la ventana, en donde dice “Enter the new SQL Server Compact database filename”, el botón que se encuentra junto a la caja de texto con el texto “Browse…” nos permite explorar el sistema de archivos de nuestra PC para seleccionar la ruta que nosotros deseemos y colocar allí la base de datos.

Luego hay un Check que nos permite sobre escribir la base de datos si esta ya existe.

También podemos escoger en este punto, el tipo idioma que va a manejar nuestra base de datos.

Si deseamos que nuestra base de datos haga diferencia entre mayúsculas y minúsculas podemos seleccionar el Check de “Case sensitive” que aparece bajo el Collation que hayamos seleccionado para nuestra base de datos.

 

La siguiente configuración de creación, es si deseamos asignarle una clave para poder acceder a nuestra base de datos.

image

También podemos seleccionar un método de encriptación de los datos para nuestra base de datos, si no deseamos encriptar nuestra base de datos seleccionamos la opción por defecto : “UNENCRYPTED”.

 

image

 

Vamos a crear una BD que se llame DBWinPhone.sdf, con los parámetros por defecto, como lo podemos apreciar en la imagen anterior.

 

Al presionar el botón de OK, nos muestra una ventana de confirmación indicando que la base de datos no tiene una clave de protección.

image

Seleccionamos el botón Yes para que nos muestre la pantalla para abrir nuestra base de datos y empezar a diseñar y crear nuestras tablas.

image

En esta pantalla ya tenemos el botón de “Connect” con el cual abrimos y nos conectamos a la base de datos.

 

Nos abre la ventana del SQL Server Management Studio y en el explorador de Objetos nos muestra algo como la siguiente imagen:

image

Vamos a crear una nueva tabla para nuestra base de datos, para esto, damos clic derecho sobre la carpeta de las tablas “Tables”, esto lo podemos apreciar en la siguiente imagen:

image

Al seleccionar la opción “New Table” nos abre la pantalla de creación de una nueva tabla para nuestra base de datos:

image

En la caja de texto “Name” colocamos el nombre de nuestra tabla, el la parte inferior vamos creando cada una de las columnas de nuestra base de datos.

En la caja de texto debajo de “Column Name” colocamos el nombre de las columnas, el tipo de dato para el campo, la longitud si aplica y si acepta o no nulos.

Vamos a crear una tabla llamada Pais, con dos campos: Id de tipo auto numérico y el campo Pais de tipo nvarchar (texto) para almacenar el nombre del país.

image

En la imagen anterior podemos observar la estructura de la tabla Pais que creamos para nuestra base de datos.

Al darle clic al botón de OK de la pantalla se graba la estructura de la  tabla y se ve de la siguiente forma en el SQl Server Management Studio:

image

 

Ya tenemos nuestra base de datos .SDF creada, ahora vamos a realizar el proceso de la creación de la clase que forma el DataContext para poder utilizarlo en nuestra aplicación de Windows Phone 7.5.

 

Para poder realizar el proceso necesitamos un programa que se instala con el SDK de Windows Phone 7.5, este programa se llama SQLMetal.

 

Para ejecutarlo, vamos a abrir una ventana de comandos del sistema operativo, pero la ventana de comandos a abrir es la que se encuentra en la sección de Visual Studio 2010, como lo podemos apreciar en la siguiente imagen:

 

image

Esto nos abre una ventana de comandos:

image

Ahora si podemos ejecutar el comando SQLMetal que nos permite generar la clase que representa el DataContext para acceder a nuestra base de datos.

 

El comando a utilizar para generar nuestra clase es el siguiente:

 

SQLMETAL D:\Roberto\Projects\Silverlight\DBWinPhone.sdf

/code:D:\Roberto\Projects\Silverlight\DBWinPhone.cs

/language:csharp

/namespace:LocalDBDemo

/context:DBWinPhoneDataContext

/pluralize

 

  1. El primer parámetro es la ruta y el nombre de la base de datos .SDF a la cual vamos a generar el DataContext.
  2. /code: representa la ruta y el nombre del archivo físico en donde se va a generar el DataContext.
  3. /language: representa el lenguaje de programación en el cual se va a generar la clase.
  4. /namespace: representa el NameSpace con el cual se va a generar el DataContext.
  5. /context: representa el nombre que va a tener al clase del DataContext.
  6. /pluralize: indica que se deben crear los objetos que representan las colecciones y grupos de registros en el DataContext.

En nuestra ventana de comandos colocamos nuestra sentencia para ejecutarla:

image

 

Iniciando la ejecución del comando:

image

Al terminar la generación nos muestra lo siguiente:

image

Esto lo que hace es generarnos el archivo DBWinPhone.cs en la ruta especificada como lo podemos apreciar en la siguiente imagen:

image

 

Al verificar la clase DataContext generada con el nombre DBWinPhone.cs podemos observar lo siguiente en el código:

#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.239
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace LocalDBDemo
{
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Data;
using System.Collections.Generic;
using System.Reflection;
using System.Linq;
using System.Linq.Expressions;
using System.ComponentModel;
using System;


[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="DBWinPhone")]
public partial class DBWinPhoneDataContext : System.Data.Linq.DataContext
{

private static System.Data.Linq.Mapping.MappingSource mappingSource
= new AttributeMappingSource();


Como se observa en el código el namespace es el mismo que colocamos en la sentencia de la ventana de comandos, de igual manera podemos ver le nombre de la clase que también corresponde al nombre utilizado en la sentencia.



 



Lo siguiente que debemos hacer con la clase DataContext generada es eliminar dos de los cuatro constructores de la clase, si los dejamos, al compilar la clase en nuestro proyecto vamos a tener errores pues estos constructores no son soportados por el espacio de nombres System.Data.Linq.



 



public DBWinPhoneDataContext(string connection) :  base(connection, mappingSource)
{
OnCreated();
}

public DBWinPhoneDataContext(System.Data.IDbConnection connection) :  base(connection, mappingSource)
{
OnCreated();
}


public DBWinPhoneDataContext(string connection,
System.Data.Linq.Mapping.MappingSource mappingSource) :  base(connection, mappingSource)
{
OnCreated();
}

public DBWinPhoneDataContext(System.Data.IDbConnection connection,
System.Data.Linq.Mapping.MappingSource mappingSource) :  base(connection, mappingSource)
{
OnCreated();
}


Los constructores señalados en color amarillo son los que deben eliminarse de la clase de DataContext generada, al eliminarlos y compilar, los errores van a desaparecer.



Al finalizar, grabamos la clase y la adicionamos a nuestro proyecto de manejo de bases de datos locales en Windows Phone 7.5.



 



Bien, este es el primer artículo sobre este tema, en próximos días estaré publicando la manera como vamos a utilizar y como incorporar esta clase a nuestro proyecto de Windows Phone 7.5



 



Hasta la próxima!  Feliz desarrollo!

miércoles, octubre 05, 2011

[EVENTO] ExpertDay

image              image             image

Tengo el gusto de invitarlos al Evento ExpertDay que se realizara en Bogotá el 8 de octubre de 9am a 5pm con la participación de expertos en los diferentes temas a tratar.

Registro:

http://expertday.org/registro/?utm_source=blogs&utm_medium=miembrosbdotnet&utm_campaign=expertday

Pueden registrarse para asistir de manera virtual también al evento.

 

La lista de conferencias la encuentran en:

http://expertday.org/conferencistas.html?utm_source=blogs&utm_medium=miembrosbdotnet&utm_campaign=expertday

 

Si asistes presencialmente  puedes participar en el concurso para ganar un XBOX 360 con Kinet:

http://expertday.org/xbox.html?utm_source=blogs&utm_medium=miembrosbdotnet&utm_campaign=expertday

 

Los espero a tod@s, para que disfruten de este gran evento!