sábado, 19 de marzo de 2011

SQL Server CE 4.0

Este post me hace especial ilusión porque puede suponer que el trabajo y despliegue de aplicaciones con bases de datos en proyectos pequeños se simplifique sobre manera. Es decir, a día de hoy, no hay ningún problema en utilizar Sql Server Express para desarrollos pequeños o incluso medianos, pero… porque siempre hay un pero… la cosa se complica cuando queremos distribuir nuestra aplicación a cualquier usuario o incluso en un hosting compartido (esta situación me quita mucho más el sueño). Puesto que Sql Server Express requiere de una instalación y administración previa, las posibilidades en un hosting pasan porque soportar la posibilidad de pagar por una base de datos Sql Server Express (que ironía, Sql Server Exprees es gratuito pero después te cobran por ello en el hosting) o si no estás condenado a adquirir un VPS (Servidor privador virtual) en el que tú haces y deshaces pero al precio de tener que haber desechado un hosting compartido a favor de tu propio servidor virtual, que lógicamente es más caro y además tú eres responsable de toda su administración.

En esta línea, y para que el despliegue de una aplicación ASP.NET con acceso a datos se simplifique, han trabajado duramente los chicos de ASP.NET (Ups!, cualquiera diría que los conozco, pero la frase ha quedado chula, ¿eh?). Por ello, ahora podremos utilizar Sql Server CE 4.0 en detrimento de Sql Server Express, o mejor dicho, podremos comenzar con Sql Server CE 4.0 y si le programa lo requiere debido a su volumen, migrar fácilmente a Sql Server Express (ciertamente si mi sitio web ya es visitado por cientos o miles de usuarios, comenzaría a entender que debo pagar por mi base de datos o bien contratar un VPS). También es verdad que siempre está la alternativa de SqlLite, pero nunca me ha dado por probarlo.

Para ver en acción SqlLite http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/ y un proveedor de ADO.NET para SqlLite se puede encontrar en http://sqlite.phxsoftware.com/

A continuación te dejo unos enlaces de obligada lectura (siempre y cuando te interese este post, claro). Los primeros son de Scott Guthrie (director general de la división de desarrollo de Microsoft, con lo que si no hacemos casos a este tío, apaga y vámonos!) y el último de Gonzalo Perez (quién leo habitualmente en geeks.ms y la verdad es que en temas de ASP.NET, jQuery, etc. tiene muy buena pinta). Ya por último otro post con un buen resumen de Sql Server Compact 4.0.

http://weblogs.asp.net/scottgu/archive/2010/06/30/new-embedded-database-support-with-asp-net.aspx

http://weblogs.asp.net/scottgu/archive/2011/01/11/vs-2010-sp1-and-sql-ce.aspx

http://geeks.ms/blogs/gperez/archive/2011/03/15/sql-server-ce-4-0-y-el-por-que-deber-237-a-interesarnos.aspx

http://blogs.msdn.com/b/sqlservercompact/archive/2010/07/07/introducing-sql-server-compact-4-0-the-next-gen-embedded-database-from-microsoft.aspx

A grandes rasgos, las principales características de SQL Server CE 4.0 (verás que siempre remarco 4.0, pero es que versiones previas de este producto no podían trabajar en con múltiples conexiones concurrentes, así que directamente para mí no existían esas otras versiones previas).

·         Gratuito y sin ninguna restricción de licencias.

·         No necesita instalación ni administración ni cuenta de usuario con privilegios.

·         Funciona con ADO.NET y Entity Framework.

·         Soporta escenarios con múltiples conexiones concurrentes.

·         Fácil migración a Sql Server.

Para instalar Sql Server CE 4.0, hay que descargarlo desde el siguiente enlace http://www.microsoft.com/downloads/en/details.aspx?FamilyID=033cfb76-5382-44fb-bc7e-b3c8174832e2

Si quieres, también puedes descargarte los BOL desde aquí http://www.microsoft.com/downloads/en/details.aspx?FamilyID=DDA9DC83-F59A-4ECA-B792-DD1D9629B6E7

Como herramienta de administración tenemos varias posibilidades. WebMatrix fue la primera herramienta en soportar la administración y gestión de Sql Server CE 4.0. Por otro lado, si quieres utilizar Visual Studio 2010, tienes primero que instalar el Service Pack 1 y después tienes que instalar las herramientas “Visual Studio 2010 SP1 Tools for SQL Server Compact 4.0” desde WPI (Web Platform Installer). La verdad es que no he encontrado otra forma de conseguir estas herramientas sino es a través de WPI. De hecho, gracias a que encontré este post que hablaba sobre ello, sino aún me estoy volviendo loco… http://programmers.stackexchange.com/questions/56718/sql-server-ce-4-graphical-tools-for-designing-tables-etc

Además he descubierto recientemente una extensión para Visual Studio 2010 que francamente es muy buena y diría yo casi indispensable para trabajar con Sql Server Ce 4.0 desde Visual Studio. Te dejo aquí el enlace de CodePlex, http://sqlcetoolbox.codeplex.com/. Yo la verdad es que me pregunto como usuarios desinteresados se curran estas pedazo de herramientas y mientras tanto Microsoft hace las suyas tan parcas… al menos en lo que respecta a Sql Server Ce 4.0…

Después de esto, ya podemos agregar un nuevo elemento en la carpeta App_Code de un sitio web o proyecto de aplicación web, que será del tipo “Base de datos local de SQL Server Compact 4.0” y que agregará un fichero con la extensión .sdf. También podemos ver que agregar este fichero ha incluido una referencia al ensamblado System.Data.SqlServerCe del GAC.

clip_image002

A partir de aquí podemos trabajar con nuestra base de datos con normalidad, agregar tablas, índices, etc. Cabe señalar que SQL Server CE 4.0 no soporta procedimientos almacenados, pero podré vivir con ello…

Además, ahora tenemos disponible un nuevo espacio de nombres que es el proveedor ADO.NET para SQL Server CE 4.0. El espacio de nombres es System.Data.SqlServerCe. Por ejemplo, un código simple para llenar un GridView podría ser el siguiente:

Imports System.Data

Imports System.Data.SqlServerCe

 

Partial Class _Default

    Inherits System.Web.UI.Page

 

    Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click

        Dim connection As New SqlCeConnection("Data Source=|DataDirectory|\EJEMPLO.sdf")

        Dim dataAdapter As New SqlCeDataAdapter

        Dim command As New SqlCeCommand("SELECT * FROM Clientes", connection)

        dataAdapter.SelectCommand = command

        Dim dataSet As New DataSet

        dataAdapter.Fill(dataSet)

        GridView1.DataSource = dataSet

        GridView1.DataBind()

        dataSet.Dispose()

        command.Dispose()

        dataAdapter.Dispose()

        connection.Dispose()

    End Sub

End Class

 

Cabe mencionar que este ejemplo lo he hecho tanto en un sitio web con .NET Framework 3.5 como en uno con .NET Framework 4.0 y en ambos ha funcionado.

El ejemplo va viento en popa, sólo queda subir el sitio web a un hosting compartido para ver que todo funciona OK y que nunca más perderé tiempo preguntando si el hosting soporta Sql Server Express, cuánto cuesta, etc.

El último paso que hay que dar antes de subir al hosting compartido es cambiar la referencia al ensamblado System.Data.SqlServerCe, para que en vez de cargarlo desde GAC lo cargue desde el directorio \bin de nuestro sitio web (de este modo no tendremos ninguna dependencia externa al proyecto). En mi caso, el ensamblado está en la carpeta C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll, así que eliminamos la referencia a GAC y copiamos el ensamblado en el directorio \bin.

Ahora ya puedo hacer la prueba definitiva en un hosting compartido y… bueno, para esto tengo que esperar al lunes, pero asumo que funcionará… que emoción… ya os contaré! Mejor visita este otro post donde ya hemos publicado con éxito la aplicación.

Un saludo!.

 

3 comentarios:

  1. aparte de WebMatrix y Visual Studio, para administrarla se puede usar: SQL Server Compact Toolbox, pero la versión standalone (http://sqlcetoolbox.codeplex.com/releases/view/69910)
    perfecta para ambientes donde tenemos versiones Express de Visual Studio

    ResponderEliminar
  2. Buen aporte, gracias, no conocía la versión stand-alone.

    ResponderEliminar
  3. Hola Sergio, poninedo el ensamblado en la carpeta Bin, este de distribuira con la aplicacion ?

    ResponderEliminar