Mostrando entradas con la etiqueta Uso de SQLCe. Mostrar todas las entradas
Mostrando entradas con la etiqueta Uso de SQLCe. Mostrar todas las entradas

sábado, 26 de octubre de 2013

Agregar una Base de datos SqlCompact a un proyecto de Visual Studio

Hola a todos:

Para ir entrando en contexto…

Vamos a ver como agregar una Base de datos SqlCompact a un proyecto de desarrollo Vs, este ejemplo aplica tanto para proyectos de desarrollo C# o Vb.Net..

Para los que aun no conocen SqlCompact esta es la mejor definición de la misma pagina de descarga de Microsoft:

“SQL Server Compact 3.5 SP2 es una base de datos incrustada que permite a los desarrolladores crear aplicaciones sólidas para dispositivos móviles y equipos de escritorio con Windows”
Para descargar SqlCompact 3.5 Sp2 :

Service Pack 2 de Microsoft SQL Server Compact 3.5 para equipos de escritorio con Windows


SqlCompact es utilizado para desarrollo móviles, aunque tiene un potencia desde mi punto de vista superior al propio Access del paquete Microsoft Office comúnmente utilizado para pequeñas aplicaciones de escritorio, ya que puede fácilmente integrarse al ambiente de Sql Server Management Studio y operar tal cual como si se estuviera trabajando con una archivo Mdf (extensión de los archivo físicos de Bases de datos propios de Sql server), haciendo con esta una Base de datos muy potente, además de su fácil migración a Sql Server, el uso de muchas funciones propias de Sql Server lo hacen desde mi punto de vista la Bd por excelencia para una aplicación en crecimiento.

Bueno vayamos a lo que nos interesa….

Comience creando un proyecto del tipo WindowsForms, a este agregue dos botones a un llámelo btnTraer y al otro btnGuardar, un control TextBox y un control DataGridView.

Una vez que tenga creado el proyecto y agregado el botón, agregue un nuevo elemento al mismo:

Haga Click derecho sobre el nombre del Proyecto –> Agregar –> Nuevo Elemento
newItem

Del panel izquierdo seleccione Datos –>Del panel medio seleccione Base de datos Local –> Deje el nombre por default –>Presione Agregar
d1

Seleccione Conjunto de Datos –> Presione Siguiente
d2

Presione Finalizar
d3

Esto nos crea tres nuevos elementos en el proyecto que podremos observar por medio del Explorador de soluciones:
d4

El archivo de configuración App.cofig. Si abrimos el archivo dentro podremos observar la cadena de conexión:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="EjemploBdSqlCompact.Properties.Settings.Database1ConnectionString"
            connectionString="Data Source=|DataDirectory|\Database1.sdf"
            providerName="Microsoft.SqlServerCe.Client.3.5" />
    </connectionStrings>
</configuration>

Modifique por favor el Nombre de la cadena de conexión a.
<add name="cnnString"

DataBase1.Sdf. Este es el archivo físico de una Base de datos SqlCompact

DataBase1DataSet.xsd, este puede eliminarlo ya que nos nos servirá de nada (para la mayoría de los casos).

Ahora guarde y genere el proyecto, al generar el proyecto nuestra Bd que por defecto se crea en:

“…Documents\Visual Studio 2010\Projects\EjemploBdSqlCompact\EjemploBdSqlCompact”

se copia al directorio:

“…Documents\Visual Studio 2010\Projects\EjemploBdSqlCompact\EjemploBdSqlCompact\bin\Debug”

Bien, aquí hay un punto que resaltar y es que el Vs trabaja por defecto con la Bd que se crea en el primer directorio mencionado arriba y nuestro archivo de configuración apunta al archivo que se copia en el directorio “…Bin/Debug” después de generar el proyecto:

connectionString="Data Source=|DataDirectory|\Database1.sdf"

(al establecer el Data Source como DataDirectory, estaremos tomando la información de la Bd que se encuentra en el directorio desde donde se esta ejecutando la aplicación ósea la carpeta Debug).

Para poder utilizar un solo archivo desde el Vs, tendremos que cambiar el path de conexión con el fin de que apunte al archivo existente en Bin/Debug, para esto:

Desde el Explorador de soluciones haga doble Click sobre el elemento DataBase1.Sdf, para abrir el Explorador de Servidores.

Haga Click derecho sobre el archivo de Base de datos –> Seleccione Modificar Conexión:
d10

Seleccione Examinar –> Diríjase a la carpeta …Bin/Debug y seleccione el archivo de Base de datos –> Abrir –> Aceptar
d11

Echo lo anterior ya tenemos nuestro Vs configurado para que trabaje con el mismo archivo que nuestro App.Cofig,

Ahora Haga Click derecho sobre la Base de datos –> Seleccione Agregar Tabla
d5

Cree una tabla como la siguiente, observe que el campo Id es del tipo int, funge como clave principal y es Identity o identidad autoincrementable:

d6

Click derecho sobre la tabla que acaba de crear –> Seleccione Mostrar Datos de tabla
d7

Agregue algunos datos de ejemplo:
d8

El archivo de Base de datos que agregamos al proyecto se crea con la propiedad “Copiar en el directorio de resultados” con la opción “Copiar si es posterior” por default, si dejamos esta configuración nos traerá problemas mas adelante puesto que por cada vez que compilemos el proyecto copiara el archivo original a la carpeta Bin/Debug eliminando con esto cualquier cambio que hayamos echo con anterioridad (en realidad no elimina los cambios, sino que reemplaza el archivo por el orginal), como los datos que hayamos insertado, actualizado, cambios de tablas, etc. dando una sensación de que los cambios y actualizaciones no se estuvieran efectuando, para corregir esto:

En el Explorador de Soluciones –> Click derecho sobre el archivo de Base de datos –> Propiedades –> Establezca a la propiedad Copiar en el directorio de resultados la opción No Copiar:

d9

Después de haber echo lo anterior solo nos queda usar nuestra App.Cofig para leer nuestra Base de datos Sql Compact Edition:

Como agregamos la Bd desde el asistente de Vs automáticamente tendremos lista las referencias a la librería System.Data.SqlServerCe, en caso de agregar un archivo de Bd ya existente tendrá que crear las referencia a estas librería manualmente.

Para esto Haga Click derecho sobre le nombre del proyecto –> Seleccione Agregar Referencia –> Diríjase a la ficha .Net –> Muévase por los items de la lista hasta ubicar la librería System.Data.SqlServerCe –> Selecciónela y presione Aceptar.

Para usar el archivo de configuración tiene que hacer la referencia a la librería System.Configuration:

App. Config, cadenas de conexión

En el evento Click de uno de los botones que pusimos en el Formulario copie y pegue las siguiente líneas de código:

Código C#:
private void btnTraer_Click(object sender, EventArgs e)
{
    //
    //Encerramos la conexion en un Bloque using para asegurarse de destruir todos los objetos utilizados dentro
    //ademas de cerrar la conexion despues de ejectuar la consulta
    //
    using (SqlCeConnection cnx = new SqlCeConnection(ConfigurationManager.ConnectionStrings["cnnString"].ToString()))
    {
        //Creamos una variable que contendra la consulta a ejecutar
        //
        String SqlAction = "SELECT * FROM Estados";
        //
        //Creamos un comeando del tipo SqlCeCommand y le pasamos la variable que contiene
        //la consulta y la conexion
        //
        using (SqlCeCommand cmd = new SqlCeCommand(SqlAction, cnx))
        {
            //
            //Creamos un objeto DataAdapter este objeto se encarga de abrir la conexion a la Bd
            //
            SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
            //
            //Creamos un objeto DataTable que contendra los daos recuperados por el DataAdapter
            //
            DataTable dt = new DataTable();

            //
            //Llenamos el objeto DataTable con los datos recuperados por el DataAdapter
            //
            da.Fill(dt);
            //
            //Establecemos el DataSource del Control DataGridView
            //
            dataGridView1.DataSource = dt;
        }

    }
}

Código Vb.Net:
    Private Sub btnTraer_Click(sender As System.Object, e As System.EventArgs) Handles btnTraer.Click
        '
        'Encerramos la conexion en un Bloque using para asegurarse de destruir todos los objetos utilizados dentro
        'ademas de cerrar la conexion despues de ejectuar la consulta
        '
        Using cnx As New SqlCeConnection(ConfigurationManager.ConnectionStrings("cnnString").ToString())
            'Creamos una variable que contendra la consulta a ejecutar
            '
            Dim SqlAction As String = "SELECT * FROM Estados"
            '
            'Creamos un comeando del tipo SqlCeCommand y le pasamos la variable que contiene
            'la consulta y la conexion
            '
            Using cmd As New SqlCeCommand(SqlAction, cnx)
                '
                'Creamos un objeto DataAdapter este objeto se encarga de abrir la conexion a la Bd
                '
                Dim da As New SqlCeDataAdapter(cmd)
                '
                'Creamos un objeto DataTable que contendra los daos recuperados por el DataAdapter
                '
                Dim dt As New DataTable()

                '
                'Llenamos el objeto DataTable con los datos recuperados por el DataAdapter
                '
                da.Fill(dt)
                '
                'Establecemos el DataSource del Control DataGridView
                '
                dataGridView1.DataSource = dt

            End Using
        End Using
    End Sub

Ejecute la aplicación y presione el botón Traer, si siguió el articulo obtendrá un resultado como el siguiente:

d12

Ahora, probemos guardar un nuevo registro:

Copie y pegue el siguiente código en el botón Guardar:

Código C#:
private void btnGuardar_Click(object sender, EventArgs e)
{
    //
    //Encerramos la conexion en un Bloque using para asegurarse de destruir todos los objetos utilizados dentro
    //ademas de cerrar la conexion despues de ejectuar la consulta
    //
    using (SqlCeConnection cnx = new SqlCeConnection(ConfigurationManager.ConnectionStrings["cnnString"].ToString()))
    {
        //
        //Abrimos la conexion a la Base de datos
        //
        cnx.Open();
        //Creamos una variable que contendra la consulta a ejecutar
        //
        String SqlAction = "INSERT INTO Estados (Nombre) VALUES (@nombre)";
        //
        //Creamos un comeando del tipo SqlCeCommand y le pasamos la variable que contiene
        //la consulta y la conexion
        //
        using (SqlCeCommand cmd = new SqlCeCommand(SqlAction, cnx))
        {
            //
            //Establecemos valores a los parametros
            //
            cmd.Parameters.AddWithValue("@nombre", textBox1.Text.Trim());
            //
            //Ejecutamos la consulta
            //
            cmd.ExecuteNonQuery();
        }

    }
}

Código Vb.Net:
    Private Sub btnGuardar_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardar.Click
        '
        'Encerramos la conexion en un Bloque using para asegurarse de destruir todos los objetos utilizados dentro
        'ademas de cerrar la conexion despues de ejectuar la consulta
        '
        Using cnx As New SqlCeConnection(ConfigurationManager.ConnectionStrings("cnnString").ToString())
            '
            'Abrimos la conexion a la Base de datos
            '
            cnx.Open()
            'Creamos una variable que contendra la consulta a ejecutar
            '
            Dim SqlAction As String = "INSERT INTO Estados (Nombre) VALUES (@nombre)"
            '
            'Creamos un comeando del tipo SqlCeCommand y le pasamos la variable que contiene
            'la consulta y la conexion
            '
            Using cmd As New SqlCeCommand(SqlAction, cnx)
                '
                'Establecemos valores a los parametros
                '
                cmd.Parameters.AddWithValue("@nombre", textBox1.Text.Trim())
                '
                'Ejecutamos la consulta
                '
                cmd.ExecuteNonQuery()

            End Using
        End Using
    End Sub

Al ejecutar la consulta inmediatamente la Bd se vera afectada:

d13

Recuerde que si trabaja sobre el archivo ubicado el Bin/Debug al momento de crear su proyecto de Setup deberá de copiar este archivo a la carpeta por default osea a:

“…Documents\Visual Studio 2010\Projects\EjemploBdSqlCompact\EjemploBdSqlCompact”

Ya que al momento de crear el proyecto este tomara la Bd de ahí para armar el paquete de instalación y cuando lo instale dejara esta archivo en el mismo directorio que el ejecutable de su aplicación…

Saludos desde Monterrey, Nuevo León México!
Ejemplo C#
Ejemplo Vb.Net
Nota: El proyecto fue desarrollado en Vs2010 usando una Bd SqlCe v3.5 y Framework 4.0 Client Profile