Grimpi IT Blog

noviembre 3, 2008

Detectar la versión de una base SQL Server Compact Edition

Filed under: SQL Server CE — Etiquetas: , — grimpi @ 1:16 am

Ayer descubrí un link muy interesante de como detectar la versión de un archivo SDF sin necesidad de abrir una conexión a la base.

http://nativemobile.blogspot.com/2007/12/detecting-sdf-file-version.html

La técnica consiste en abrir el archivo como si fuera un binario común y leer una serie de caracteres del archivo en una posición determinada. Dependiendo de la marca que se encuentra en el archivo, es una versión diferente.
Porque complicarse la vida haciendo esto cuando podemos abrir la conexión, llamar a la propiedad ServerVersion del objeto SqlCeConnection?
Respuesta simple: No se puede abrir una base de SQL Server CE 3.1 usando las librerías de 3.5. Por lo tanto, si necesitamos hacer una aplicación que sepa trabajar con ambas versiones simultáneamente, antes de abrir la conexión, debemos averiguar la versión de la base para saber a qué versión de la librería de conexión a la base debemos instanciar.

Anuncios

octubre 24, 2008

SQLite vs SQL Server Compact Edition Parte 1

Filed under: SQL Server CE, SQLite — Etiquetas: , , — grimpi @ 11:11 am

Recientemente tuvimos que desarrollar un sistema que debía funcionar con una base de datos embebida. Hay varias soluciones en el mercado, SQLite y SQL Server Compact Edition son de las más populares. (También exista VistaDB, pero es paga).
Cuales son las ventas y desventajas de usar una base u otra?

SQLite:
Pros:

  • Es Open Source
  • Es multiplataforma (Funciona en Linux, Windows, MacOs)
  • Es ultra liviana y rápida. Instalación super sencilla, es un solo archivo.
  • Tiene Triggers y Vistas
  • Se puede agregar externamente User Defined Functions (UDF)
  • Soporta operaciones en memoria.
  • Posibilidad de usar 2 o más bases de datos en la misma consulta (ATTACH)

Contras:

  • Cuando se hace una operación de escritura, se bloquea la base.
  • Es typeless. Si bien se pueden definir tipos de datos, no hace ningún tipo de validación a la hora de insertar o actualizar datos.
  • No tiene Foreign Keys (se pueden emular con triggers)
  • No tiene un campo datetime (tiene un date y un time, pero no un campo que una ambos. Hay que usar varchar para estos casos).
  • No tiene ningún mecanismo de replicación y sincronización de datos.
  • El comando ALTER TABLE está limitado a RENAME TABLE y ADD COLUMN
  • No soporta ni RIGHT JOIN ni FULL JOIN.
  • No tiene Nested transactions (Transacciones en cadena)
  • No soporta INFORMATION_SCHEMA (usa sus propias funciones para inspeccionar la metadata).
  • Admite campos autonumericos, pero no permite setear el valor inicial del campo ni el valor del salto de incremento (Identity seed e Identity Increment en SQL Server, muy utiles a la hora de replicar).

SQL Server Compact Edition
Pros:

  • Es gratis (pero no Open Source)
  • Está integrado con el framework de sincronización, Sync Framework for ADO.NET. Lo que permite sincronizar datos entre una base embebida y una base SQL Server de manera casi trivial.
  • Tiene mecanismo de replicación nativo.
  • Hace validación de tipos y tiene mayor cantidad de tipos de datos que SQLite.
  • Se puede usar como IDE Visual Studio 2005/2008 o Management Studio de SQL Server
  • Soporta INFORMATION_SCHEMA

Contras:

  • Cuando se hace una operación de escritura, se bloquea la tabla.
  • No soporta operaciones en memoria.
  • No es multiplataforma (Solo funciona en Windows)
  • No tiene ni triggers ni vistas.
  • No soporta User Defined Functions (UDF)
  • No soporta RIGHT JOIN
  • No tiene Nested transactions (Transacciones en cadena)

Blog de WordPress.com.