none
Convertir base de datos SQL Server 2005 a SQL Server Compact Ed.

    שאלה

  • Hola,

    Necesito convertir, o importar los datos, de una Base.mdf (SQLServer2005) a una Base.sdf (SQLServer Compact Edition) Si me pudierais orientar un poco, os lo agradeceria muchisimo.

     

    Gracias! Un saludo!

    שבת 18 אוקטובר 2008 03:47

תשובות

  •  Fisa.net Escribió:

     

    Ivan, es posible conectarse a bases de datos Sql Ce desde el framework de escritorio (nosotros tenemos algunas aplicaciones que actualmente lo hacen).

    Tenes que agregar a tu proyecto una referencia a la System.Data.SqlServerCe y usar los objetos de esa libreria para conectarte. Dependiendo de la version que tengas instalada de Visual Studio, y los SDK que hayas instalado, quizas tengas que instalar el cliente para Sql Server Ce de escritorio.

    Podes bajarlo desde este link:

    http://www.microsoft.com/downloads/details.aspx?familyid=DC614AEE-7E1C-4881-9C32-3A6CE53384D9&displaylang=en

    Pero antes fijate que no lo tengas ya instalado tratando de agregar la referencia. Si la referencia esta, usa esa.

     

    Un detalle importante es que si vas a necesitar ejecutar tu aplicacion en otra PC distinta a la que estas usando para desarrollar, tambien vas a tener que instalar el cliente de Sql Ce en esa maquina, o copiar todas las librerias del Sql Ce(manejadas y nativas) a la carpeta de la aplicacion.

     

    Dentro de la aplicacion entonces, vas a tener un objeto SqlConnection para conectarte al servidor de escritorio, y un objeto SqlCeConnection para conectarte a la base de Sql Ce.

     

    Un ejemplo bien basico de como sería tu aplicacion es este:

     

    codigo

     

    //creamos las conexiones

    SqlConnection conexionEscritorio = new SqlConnection("mi connection string");

    SqlCeConnection conexionCe = new SqlCeConnection("mi connection string");

     

    //creamos el comando para leer de escritorio

    SqlCommand comandoEscritorio = conexionEscritorio.CreateCommand();

    comandoEscritorio.CommandText = "SELECT ... ";

     

    //abrimos las conexiones

    conexionEscritorio.Open();

    conexionCe.Open();

     

    //leemos los datos de escritorio

    IDataReader resultado = comandoEscritorio.ExecuteReader();

    while (resultado.Read())

    {

    //por cada dato leido, escribimos en CE con un comando para CE

    SqlCeCommand comandoCe = conexionCe.CreateCommand();

    comandoCe.CommandText = "INSERT ... ";

    comandoCe.ExecuteNonQuery();

    }

     

    //cerramos las conexiones

    conexionEscritorio.Close();

    conexionCe.Close();

     

     

    Merge Replication y RDA son soluciones mucho mas complejas, pensadas para aplicaciones que constantemente estan sincronizando datos entre bases de escritorio y moviles. Te llevaría mucho tiempo, no son sencillas de implementar, y para tu caso no valdría la pena.

     

    De nada,

    Saludos!!

     

    Hola, ya he solucionado el problema del error que era este exactamente:

    No se encontro DllNotFoundException

    No se puede cargar el archivo DLL 'sqlceme30.dll': No se puede encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)

     

    Parece ser que las dlls del sqlce que tenia han sido modificadas en alguna actualizacion, posiblemente cuando instale el VStudio2008 para probarlo, que instala el sqlce 3.5 y no eran compatibles. lo solucione copiando las que se encuentran en:

    C:\Archivos de programa\Microsoft Visual Studio 8\Common7\IDE):

    • sqlceca30.dll
    • sqlcecompact30.dll
    • sqlceer30es.dll
    • sqlceme30.dll
    • sqlceoledb30.dll
    • sqlceqp30.dll
    • sqlcese30.dll

    en Bin\Debug y Bin\Release de la aplicacion.

     

    Bueno, ahora ya puedo ver en un datagrid la informacion de la base de datos .sdf desde la aplicacion de escritorio, por lo que creo que ya no habra problema para rellenarla con los datos de la otra.

     

    Muchas gracias por todo Juan Pedro, me ha sido de gran ayuda.

    Un saludo !!!!

    יום רביעי 22 אוקטובר 2008 22:15

כל התגובות

  • Necesitas hacerlo de manera normal en tus aplicaciones, o es solo una vez?

    Si es para un unico caso, la manera mas "artesanal" sería desarrollar una aplicación que se conecte a ambas bases de datos y lea en una para escribir en la otra.

    Pero si es algo que normalmente van a hacer tus aplicaciones, entonces ya tendrias que investigar un poco sobre Merge Replication o RDA, que son dos posibilidades que te da SQL Server para portar datos a SQL CE.

     

    יום רביעי 22 אוקטובר 2008 11:21
  •  Fisa.net Escribió:

    Necesitas hacerlo de manera normal en tus aplicaciones, o es solo una vez?

    Si es para un unico caso, la manera mas "artesanal" sería desarrollar una aplicación que se conecte a ambas bases de datos y lea en una para escribir en la otra.

    Pero si es algo que normalmente van a hacer tus aplicaciones, entonces ya tendrias que investigar un poco sobre Merge Replication o RDA, que son dos posibilidades que te da SQL Server para portar datos a SQL CE.

     

    Hola Juan Pedro, te agradezco tu repuesta, veras el tema es que tengo una base de datos sql server 2005 y tengo que convertirla a sql server ce para poder trabajar con ella en una pda con cframework 2.0, pero esa base de datos no sufrira modificaciones despues de crearla. La opcion que me das de crear una aplicacion que abra las dos bases de datos y copie de una a otra, ya la he intentado, pero al ejecutar la aplicacion para windows no me permite abrir la base de datos del tipo sql server ce. Tambien he probado de "copiar y pegar" las filas abriendo las dos bases de datos con el explorador de servidores de visual studio 2005, pero solo me permite copiar de la mdf y cuando quiero pegar las filas en la sdf no me aparece la opcion en el menu Editar. En cambio pruebo esto mismo con visual studio 2008 y si me lo deja hacer, copio todas las filas de una a otra con un simple "copy-paste" con la salvedad de que la base de datos sdf me obliga a actualizarla a version 3.5 de sql server compact, con lo que luego no puedo abrirla desde mi proyecto de visual studio 2005. No se, me parece un atraso enorme que no exista una manera sencilla de copiar datos entre diferentes versiones de sql server, deverian ser compatibles. La verdad es que hace muy poco que he empezado a trabajar con bases de datos y estoy bastante pez en el tema, no se si estoy haciendo algo mal, o esque simplemente no se puede hacer.

     

    Si tienes alguna idea, o me puedes mostrar algun ejemplo, te lo agradecere eternamente!!!

    Voy a echarle un vistazo a lo que me dices del Merge Replication y el RDA. Muchas Gracias!!!

    יום רביעי 22 אוקטובר 2008 15:05
  •  

    Ivan, es posible conectarse a bases de datos Sql Ce desde el framework de escritorio (nosotros tenemos algunas aplicaciones que actualmente lo hacen).

    Tenes que agregar a tu proyecto una referencia a la System.Data.SqlServerCe y usar los objetos de esa libreria para conectarte. Dependiendo de la version que tengas instalada de Visual Studio, y los SDK que hayas instalado, quizas tengas que instalar el cliente para Sql Server Ce de escritorio.

    Podes bajarlo desde este link:

    http://www.microsoft.com/downloads/details.aspx?familyid=DC614AEE-7E1C-4881-9C32-3A6CE53384D9&displaylang=en

    Pero antes fijate que no lo tengas ya instalado tratando de agregar la referencia. Si la referencia esta, usa esa.

     

    Un detalle importante es que si vas a necesitar ejecutar tu aplicacion en otra PC distinta a la que estas usando para desarrollar, tambien vas a tener que instalar el cliente de Sql Ce en esa maquina, o copiar todas las librerias del Sql Ce(manejadas y nativas) a la carpeta de la aplicacion.

     

    Dentro de la aplicacion entonces, vas a tener un objeto SqlConnection para conectarte al servidor de escritorio, y un objeto SqlCeConnection para conectarte a la base de Sql Ce.

     

    Un ejemplo bien basico de como sería tu aplicacion es este:

     

    codigo

     

    //creamos las conexiones

    SqlConnection conexionEscritorio = new SqlConnection("mi connection string");

    SqlCeConnection conexionCe = new SqlCeConnection("mi connection string");

     

    //creamos el comando para leer de escritorio

    SqlCommand comandoEscritorio = conexionEscritorio.CreateCommand();

    comandoEscritorio.CommandText = "SELECT ... ";

     

    //abrimos las conexiones

    conexionEscritorio.Open();

    conexionCe.Open();

     

    //leemos los datos de escritorio

    IDataReader resultado = comandoEscritorio.ExecuteReader();

    while (resultado.Read())

    {

    //por cada dato leido, escribimos en CE con un comando para CE

    SqlCeCommand comandoCe = conexionCe.CreateCommand();

    comandoCe.CommandText = "INSERT ... ";

    comandoCe.ExecuteNonQuery();

    }

     

    //cerramos las conexiones

    conexionEscritorio.Close();

    conexionCe.Close();

     

     

    Merge Replication y RDA son soluciones mucho mas complejas, pensadas para aplicaciones que constantemente estan sincronizando datos entre bases de escritorio y moviles. Te llevaría mucho tiempo, no son sencillas de implementar, y para tu caso no valdría la pena.

     

    De nada,

    Saludos!!

    יום רביעי 22 אוקטובר 2008 16:07
  •  Fisa.net Escribió:

     

    Ivan, es posible conectarse a bases de datos Sql Ce desde el framework de escritorio (nosotros tenemos algunas aplicaciones que actualmente lo hacen).

    Tenes que agregar a tu proyecto una referencia a la System.Data.SqlServerCe y usar los objetos de esa libreria para conectarte. Dependiendo de la version que tengas instalada de Visual Studio, y los SDK que hayas instalado, quizas tengas que instalar el cliente para Sql Server Ce de escritorio.

    Podes bajarlo desde este link:

    http://www.microsoft.com/downloads/details.aspx?familyid=DC614AEE-7E1C-4881-9C32-3A6CE53384D9&displaylang=en

    Pero antes fijate que no lo tengas ya instalado tratando de agregar la referencia. Si la referencia esta, usa esa.

     

    Un detalle importante es que si vas a necesitar ejecutar tu aplicacion en otra PC distinta a la que estas usando para desarrollar, tambien vas a tener que instalar el cliente de Sql Ce en esa maquina, o copiar todas las librerias del Sql Ce(manejadas y nativas) a la carpeta de la aplicacion.

     

    Dentro de la aplicacion entonces, vas a tener un objeto SqlConnection para conectarte al servidor de escritorio, y un objeto SqlCeConnection para conectarte a la base de Sql Ce.

     

    Un ejemplo bien basico de como sería tu aplicacion es este:

     

    codigo

     

    //creamos las conexiones

    SqlConnection conexionEscritorio = new SqlConnection("mi connection string");

    SqlCeConnection conexionCe = new SqlCeConnection("mi connection string");

     

    //creamos el comando para leer de escritorio

    SqlCommand comandoEscritorio = conexionEscritorio.CreateCommand();

    comandoEscritorio.CommandText = "SELECT ... ";

     

    //abrimos las conexiones

    conexionEscritorio.Open();

    conexionCe.Open();

     

    //leemos los datos de escritorio

    IDataReader resultado = comandoEscritorio.ExecuteReader();

    while (resultado.Read())

    {

    //por cada dato leido, escribimos en CE con un comando para CE

    SqlCeCommand comandoCe = conexionCe.CreateCommand();

    comandoCe.CommandText = "INSERT ... ";

    comandoCe.ExecuteNonQuery();

    }

     

    //cerramos las conexiones

    conexionEscritorio.Close();

    conexionCe.Close();

     

     

    Merge Replication y RDA son soluciones mucho mas complejas, pensadas para aplicaciones que constantemente estan sincronizando datos entre bases de escritorio y moviles. Te llevaría mucho tiempo, no son sencillas de implementar, y para tu caso no valdría la pena.

     

    De nada,

    Saludos!!

     

    Hola, ya he solucionado el problema del error que era este exactamente:

    No se encontro DllNotFoundException

    No se puede cargar el archivo DLL 'sqlceme30.dll': No se puede encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)

     

    Parece ser que las dlls del sqlce que tenia han sido modificadas en alguna actualizacion, posiblemente cuando instale el VStudio2008 para probarlo, que instala el sqlce 3.5 y no eran compatibles. lo solucione copiando las que se encuentran en:

    C:\Archivos de programa\Microsoft Visual Studio 8\Common7\IDE):

    • sqlceca30.dll
    • sqlcecompact30.dll
    • sqlceer30es.dll
    • sqlceme30.dll
    • sqlceoledb30.dll
    • sqlceqp30.dll
    • sqlcese30.dll

    en Bin\Debug y Bin\Release de la aplicacion.

     

    Bueno, ahora ya puedo ver en un datagrid la informacion de la base de datos .sdf desde la aplicacion de escritorio, por lo que creo que ya no habra problema para rellenarla con los datos de la otra.

     

    Muchas gracias por todo Juan Pedro, me ha sido de gran ayuda.

    Un saludo !!!!

    יום רביעי 22 אוקטובר 2008 22:15