Primero generamos el proyecto nuevo
El siguiente paso sería enlazar el proyecto Core a este que acabamos de crear del mismo modo en que se hizo con Windows Phone
Después de realizado lo anterior hay que instalar la extensión “SQLite for Windows Runtime(Windows 8.1)” desde el administrador de extensiones de Visual Studio (Menú Herramientas/Actualizaciones y extensiones)
Finalmente agregamos la referencia a esta extensión en nuestro proyecto.
Un detalle importante es que se debe crear un paquete de nuestra aplicación por arquitectura (x86,x64 o ARM) por lo cual hay que quitar esta referencia y volverla a agregar cada que cambiemos la arquitectura de lo contrario obtendremos la excepción “An exception of type 'System.BadImageFormatException' occurred in SQL.WS.exe but was not handled in user code”. Esta excepción se debe a que la extensión agrega los paquetes específicos de la arquitectura que este definida en el momento en que se agrega la referencia.
Utilizando SQLite en el proyecto de Windows Store
Como ya tenemos desarrollada nuestra clase para administrar nuestra base de datos local (CRUDManager) y en pasos anteriores ya enlazamos Core a este proyecto solo nos resta generar la funcionalidad especifica de la plataforma, la cual básicamente es la interfaz de usuario y las llamadas a las funciones de CRUDManager.En este caso el código es muy similar al de Windows Phone al ambos usar XAML como lenguaje para generar la interfaz de usuario. Aprovechando el tamaño de la pantalla y no dedicándole mucho tiempo al diseño voy a poner toda la funcionalidad en una misma pantalla a diferencia de Windows Phone que estaba acomodada por dos pantallas.
<Page x:Class="SQL.WS.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:SQL.WS" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Orientation="Horizontal"> <StackPanel Width="320"> <TextBlock FontSize="40">Guadar contactos</TextBlock> <TextBlock FontSize="20" >Nombre</TextBlock> <TextBox x:Name="txtName"></TextBox> <TextBlock FontSize="20">Edad</TextBlock> <TextBox x:Name="txtAge"></TextBox> <TextBlock FontSize="20">Correo Electrónico</TextBlock> <TextBox x:Name="txtMail"></TextBox> <TextBlock FontSize="20">Teléfono</TextBlock> <TextBox x:Name="txtPhoneNumber"></TextBox> <Button x:Name="btnSave" Margin="0,0,-3,0" Width="323" Click="btnSave_Click">Guardar</Button> </StackPanel> <StackPanel Width="300" Margin="100 0 0 0"> <TextBlock FontSize="40">Buscar contactos</TextBlock> <TextBlock FontSize="20">Nombre</TextBlock> <TextBox x:Name="txtSName"></TextBox> <Button x:Name="btnSearch" Click="btnSearch_Click" Margin="0,0,-3,0" Width="303">Buscar</Button> <Button x:Name="btnAllItems" Click="btnAllItems_Click" Width="303" Margin="0,0,-3,0">Mostrar Todos</Button> <ListBox x:Name="lbResults" Height="250"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock FontWeight="Bold">Nombre</TextBlock> <TextBlock Text="{Binding Name}"></TextBlock> <TextBlock FontWeight="Bold">Edad</TextBlock> <TextBlock Text="{Binding Age}"></TextBlock> <TextBlock FontWeight="Bold">Correo Electrónico</TextBlock> <TextBlock Text="{Binding Mail}"></TextBlock> <TextBlock FontWeight="Bold">Teléfono</TextBlock> <TextBlock Text="{Binding PhoneNumber}"></TextBlock> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <Button x:Name="btnDelete" Width="293" Click="btnDelete_Click">Eliminar seleccionado</Button> </StackPanel> </StackPanel> </Grid> </Page>Finalmente el código que da funcionalidad a esta interfaz es prácticamente el mismo que para WP
using SQL.Core.Core; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 namespace SQL.WS { /// <summary> /// An empty page that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); InitializateDB(); } CRUDManager crud; void InitializateDB() { var sqliteFilename = "ContactsDb"; var path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, sqliteFilename); ; crud = new CRUDManager(path); } private void btnSave_Click(object sender, RoutedEventArgs e) { Contact contact = new Contact(txtName.Text, int.Parse(txtAge.Text), txtPhoneNumber.Text, txtMail.Text); crud.SaveValue<Contact>(contact); lbResults.ItemsSource = crud.GetAllItems<Contact>(); } private void btnSearch_Click(object sender, RoutedEventArgs e) { //Buscamos el contacto que coincida con lo introducido por el usuario lbResults.ItemsSource = new List<Contact> { crud.GetItem<Contact>(txtName.Text) }; } private void btnAllItems_Click(object sender, RoutedEventArgs e) { //Mostramos todos los registros lbResults.ItemsSource = crud.GetAllItems<Contact>(); } private void btnDelete_Click(object sender, RoutedEventArgs e) { //Eliminamos el contacto seleccionado crud.Delete<Contact>(((Contact)lbResults.SelectedItem).Key); lbResults.ItemsSource = null; } } }