none
Dudas incrustando SQL Server Express 2008 SP1 en aplicación RRS feed

  • Pregunta

  • Buenas, a ver si me podéis aclarar este asunto...

    Actualmente tengo una aplicación usando una base de datos SQL Server Express.

    Conecto así:

    private SqlConnection _conn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=nombreapp;Integrated Security=True");

    Bien, ahora estoy implementando la configuración en red, porque la aplicación debe compartir esta base de datos en red local, es decir la aplicación se instalará en varios pc's de la misma red local y uno de ellos actuará como servidor. Por esto, imagino que deberé cambiar el "Data Source" apuntando a una ip en vez de a una instancia en las aplicaciones que estén instaladas en red. 

    Aquí me surge el primer problema, el mas importante. La instancia debe estar configurada para aceptar conexiones TPC/IP, por lo que o bien lo hago desde C# (desconozco si se puede, pero lo preferiría) o bien lo hago en el setup. Si lo hago en el setup no se muy bien si debería hacerlo en la instancia predeterminada, ya sea existente o lo que cree en ese momento, o en una instancia aparte con el nombre de la aplicación por ejemplo. No se que es mejor. No se si el setup puede detectar la instancia y modificarla o si sería necesario crear otra o es mas sencillo instalar otra con las opciones requeridas directamente. 

    Por otro lado no me queda claro el funcionamiento, si uno apunta a una ip en el Data Source y hay mas de una instancia ¿como sabe SQL cual debe usar? ¿como puedo especificarlo?

    Ahora otra duda. Estoy leyendo tutoriales y tratando de empezar con el setup. He leido esto:

    http://social.technet.microsoft.com/wiki/contents/articles/13315.como-incrustar-sql-server-express-en-una-aplicacion-es-es.aspx

    No se que archivo debo lanzar. No se si debe ser x64 si el sistema operativo es x64 o si me valdría un x86 para todos. Por otro lado hice lo que pone en el enlace:

    SQLEXPRWT_x86_ENU /X:c:\ExpressSetup


    Y tal carpeta queda en 550Mb! ¿realmente voy a tener que meter todo eso en mi setup? ¿No hay un redistribuible mas pequeño?, la verdad por mas que he mirado no se que archivo debo usar para redistribuir. 

    Agradecería toda la ayuda que me podáis dar, muchas gracias. 

    s2

    Edit:

    Bueno me auto-respondo a algunas cosas que ya he averiguado:

    SQLEXPR_x86_ESN.exe es válido para instalar en máquinas x64. Y el archivo redistribuible es ese, solo que primero hay que extraer y después lanzar el setup. (aunque por lo que veo el mismo SQLEXPR_x86_ESN.exe acepta los parámetros y realiza la extracción automáticamente)




    • Editado nikAK viernes, 8 de febrero de 2013 0:59
    jueves, 7 de febrero de 2013 23:08

Respuestas

  • Hola. Si entendí correctamente, en el setup de tu aplicación no es necesario que insertes el instalador de SQL Server Express. Lo que debes hacer es instalar previamente SQL Server Express en un PC o en un servidor en tu red y hacer que tu aplicación tenga en su cadena de conexión como Datasource el nombre de dicho PC o servidor más la instancia SQLEXPRESS; algo así como Datasource=NombrePC\SQLEXPRESS. Así, cada PC en red podrá llegar al servidor de base de datos.

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    viernes, 8 de febrero de 2013 11:21

Todas las respuestas

  • Hola. Si entendí correctamente, en el setup de tu aplicación no es necesario que insertes el instalador de SQL Server Express. Lo que debes hacer es instalar previamente SQL Server Express en un PC o en un servidor en tu red y hacer que tu aplicación tenga en su cadena de conexión como Datasource el nombre de dicho PC o servidor más la instancia SQLEXPRESS; algo así como Datasource=NombrePC\SQLEXPRESS. Así, cada PC en red podrá llegar al servidor de base de datos.

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    viernes, 8 de febrero de 2013 11:21
  • Hola guillermo, el problema es que se trata de una aplicación que deben poder bajar de internet e instalar por si mismos fácilmente. 

    Ciertamente solo hace falta una instancia en el servidor y apuntar a IPoNombre/Instancia desde el resto, pero ya hace falta una. El problema es que yo no puedo contar con que habrá una instancia en el PC que vaya a usarse como servidor y tampoco es viable que tenga que instalarla yo manualmente en cada caso. Este es el gran problema de SQL Server y por lo que yo ya lo había descartado para otros proyectos. 

    Ya he conseguido instalar SQL Server Express desde el setup en modo desatendido, pero he quedado espantado de la cantidad de problemas que da la instalación, y aunque funciona en algún caso no tengo ninguna seguridad de que la instalación de Express pueda fallar en el proceso de instalación dependiendo de donde se esté instalando y de lo que tengan instalado previamente.  Y ademas está el tema de la duración de la instalación que es sencillamente escandalosa. 

    La solución, que ya estoy implementado es un acceso a bd dual: 

    Hago un .msi ligero que instala la aplicación de forma rápida y segura. Tiro de SQL Server Compact mientras no se active el modo multipuesto (que es opcional) y si se activa buscaré en desde c# una instancia de SQL Server que pueda usar en el equipo, tendré que crear la base de datos y asegurarme de que acepta conexiones TCP y si es posible cambiar ese valor con alguna consulta SQL desde C#, creo que se puede pero tengo que investigarlo. Si no como último recurso lanzo desde ahí el instalador de SQL Server Express y ya lo configuro según mis necesidades. Como ultimo paso vuelco los datos desde Compact a Express.

    La verdad es que me parece bastante triste que sea tan problemático este asunto, desarrollando con un IDE de Microsoft, en una plataforma de Microsoft, implementando una base de datos de Microsoft que debe instalarse en un sistema operativo de Microsoft... y aún así no hay manera de tener fiabilidad y hay que pasar por una instalación que dura de 10 a 15 minutos. Para la próxima buscaré alternativas, quizás PostgreSQL, igual hasta me animo a probarlo en esta misma aplicación. 




    • Editado nikAK viernes, 8 de febrero de 2013 13:28
    viernes, 8 de febrero de 2013 12:59
  • Hola. Entiendo el planteamiento y creo que hay otras alternativas, como sugieres, pero no entiendo como es problema de Microsoft. Es decir, con lo que expones pues el camino es largo y si cada usuario debe tener su base de datos implementada de manera local, pues implementar Express es así; nada que hacer.

    Ahora bien, con Compact Edition, estás limitado a un archivo de base de datos de 4 GB con lo cual, de pronto cubres tu escenario. Y el tamaño de descarga es de un poco más de 2.5MB que expanden a 18MB en disco...

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    viernes, 8 de febrero de 2013 18:01
  • Pues hombre le hago el reproche a Microsoft porque es la que desarrolla el producto y porque ademas va instalado en otro producto suyo, Windows. No le voy a culpar a mi abuela xD.

    Con MySQL o PostgreSQL (al final es lo que voy a usar) haces lo mismo, de hecho mas porque no tienes las limitaciones de Express, y la instalación en vez de 15 minutos lleva como 40 segundos, y lo mas importante, no falla

    El instalador de SQL Server no se que lleva... ni que hará, pero es pesadísimo y muy poco fiable en instalaciones desatendidas. 

    En cuanto a Compact Edition el mayor problema es que es muy limitado para utilizar en entornos de red porque aunque permite conexiones simultaneas éstas no pueden ser en recursos compartidos. Es mi base de datos preferida si no hace falta acceder desde diferentes máquinas. 

    s2


    • Editado nikAK viernes, 8 de febrero de 2013 22:30
    viernes, 8 de febrero de 2013 22:25