none
PROBLEMAS CON BASE DE DATOS RRS feed

  • Pregunta

  • BUENAS TARDES, Ojala puedan darme una mano, he desarrollado un sistema en C# visual studio 2012, en una pc llamada "PC01", de alli he copiado las bases de datos y el exe del directorio "release" a otra pc llamada "PC02", en ese equipo solo he instalado el SqlLocalDB.MSI y luego ejecuto mi sistema y anda de maravilla, comparto el directorio donde se encuentran las bases de datos para su uso en red y desde la maquina original cambio la cadena de conexion para que apunte a esa otra pc "PC02" (disco W), y funciona bien, el problema radica que cuando una de las dos accesa a la conexion de la base de datos por cualquier opcion del menu que haga una consulta y a la otra ya no le permite accesar a nada y sale error "Cannot open database "W:\proyecto1\prueba1.MDF" requested by the login. The login failed" y tengo que salir de todo el sistema en una de ellas para que la otra accese a la base de datos. En ambas funciona bien pero cuando alguna ejecuta la conexion al parecer bloquea la base de datos. Mi cadena de conexion es la siguiente:

    "Data Source=(LocalDB)\\v11.0;AttachDbFilename=W:\\proyecto1\\prueba1.MDF;Integrated Security=True;Connect Timeout=5"; 

    en la maquina local la cadena esta como "D:\\....."

    Ojala puedan darme una mano. GRACIAS
    martes, 5 de mayo de 2020 19:16

Respuestas

  • Eso es porque el localDB es mono-usuario. Solo permite abrir la base de datos desde un único puesto.

    Si necesitas trabajar en multipuesto, tienes que subir a una versión superior, por ejemplo, al SQL Server Express, que también es gratuito. Esto no requiere ningún cambio en el programa, únicamente hay que cambiar la cadena de conexión.

    La edición Express sí que te permite usar la base de datos desde varios puestos. Pero no funciona de la manera en que lo estás haciendo: no hay que compartir el fichero y decirle a los dos puestos que usen el mismo fichero. En su lugar, se instala el SQL Express únicamente en el puesto en el que existe el fichero, y en los otros puestos se cambia la cadena de conexión para decirle que llame al motor SQL Express del otro puesto (no al archivo del otro puesto). Si vas a hacer esto, lee bien la documentación, porque no basta con solo instalarlo ya que la instalación predeterminada bloquea las llamadas desde puestos distintos. Tienes que habilitar expresamente esta funcionalidad.

    martes, 5 de mayo de 2020 20:39
  • como haria para que el SQL SERVER EXPRESS la reconozca

    En el SQL Server Express puedes usar la opción "Attach" ("adjuntar base de datos") para seleccionar el mismo archivo .mdb que ya tenías configurado con el localdb. Te lo reconoce perfectamente siempre que la versión del SQL Express sea mayor o igual que la versión del localdb con la que lo creaste.

    Si has instalado el SQL Server Management Studio (es gratis), la opción Attach está en el click derecho sobre la instancia en el Examinador de Objetos. Si no has instalado el SSMS, también se puede hacer transmitiendo un comando SQL del tipo "create database... for attach" o llamando al procedimiento almacenado "sp_attach_db" si es una versión antigua.

    • Marcado como respuesta Jose Manuel44 jueves, 7 de mayo de 2020 19:51
    miércoles, 6 de mayo de 2020 7:37
  •  según veo tendría que configurar puertos, firewall, establecer reglas y otras cosas mas

    Depende. Si en tu Windows hay un Firewall entonces sí, tienes que configurar el Firewall del equipo en el que está instalado SQL Server de tal manera que permita el acceso a SQL Server. La manera de hacer esto varía según la versión del Firewall que tenga tu Windows, pero en general no debería ser demasiado complicado; basta con buscar la opción de "permitir el acceso al siguiente programa..." y elegir el SQL Server.

    Pero esto ya no es una labor de programación; tu programa en sí mismo no se ve afectado, es algo que correspondería al administrador de sistemas. Lo cual no significa que un desarrollador de aplicaciones no pueda tener unos ligeros conocimientos de administración de sistemas, para poder probar estas cosas en el entorno de desarrollo. No es particularmente complicado; se puede aprender bastante rápido cómo configurar un Firewall para estos casos sencillos.

    La otra cosa que te hará falta es habilitar el acceso externo en el SQL Server. Esto es una opción que se encuentra en las Propiedades de la instancia en SQL Server Management Studio. De manera predeterminada, en un SQL Server recién instalado, esta opción está desactivada.

    • Marcado como respuesta Jose Manuel44 jueves, 7 de mayo de 2020 19:52
    miércoles, 6 de mayo de 2020 7:44

Todas las respuestas

  • Eso es porque el localDB es mono-usuario. Solo permite abrir la base de datos desde un único puesto.

    Si necesitas trabajar en multipuesto, tienes que subir a una versión superior, por ejemplo, al SQL Server Express, que también es gratuito. Esto no requiere ningún cambio en el programa, únicamente hay que cambiar la cadena de conexión.

    La edición Express sí que te permite usar la base de datos desde varios puestos. Pero no funciona de la manera en que lo estás haciendo: no hay que compartir el fichero y decirle a los dos puestos que usen el mismo fichero. En su lugar, se instala el SQL Express únicamente en el puesto en el que existe el fichero, y en los otros puestos se cambia la cadena de conexión para decirle que llame al motor SQL Express del otro puesto (no al archivo del otro puesto). Si vas a hacer esto, lee bien la documentación, porque no basta con solo instalarlo ya que la instalación predeterminada bloquea las llamadas desde puestos distintos. Tienes que habilitar expresamente esta funcionalidad.

    martes, 5 de mayo de 2020 20:39
  • Gracias Alberto, estuve dando un vistazo a lo que me indicaste y en efecto es necesario hacer lo que me dices y un tanto complicado para principiantes como yo, según veo tendría que configurar puertos, firewall, establecer reglas y otras cosas mas, o ello es para cosas mas avanzadas?, esa es la duda con lo poco que he visto de la utilización de bases de datos multiusuario desde un servidor y en efecto en la cadena de conexión se hace referencia a la ip del host y al archivo, te agradecería me indiques si voy por buen camino.

    GRACIAS NUEVAMENTE.


    martes, 5 de mayo de 2020 21:42
  • Una consulta, yo he creado integramente mi base de datos que contiene alredededor de 40 tablas integramente desde visual studio 12 atraves del explorador de servidores, como haria para que el SQL SERVER EXPRESS la reconozca y poder compartirla mediante red con otras terminales?, ya que la unica forma para que pueda trabajarla a nivel multi usuario es ingresando por el SQL server que lo invocaria desde cualquier terminal segun he visto o salvo que este en un error. GRACIAS POR EL APOYO.
    miércoles, 6 de mayo de 2020 0:56
  • como haria para que el SQL SERVER EXPRESS la reconozca

    En el SQL Server Express puedes usar la opción "Attach" ("adjuntar base de datos") para seleccionar el mismo archivo .mdb que ya tenías configurado con el localdb. Te lo reconoce perfectamente siempre que la versión del SQL Express sea mayor o igual que la versión del localdb con la que lo creaste.

    Si has instalado el SQL Server Management Studio (es gratis), la opción Attach está en el click derecho sobre la instancia en el Examinador de Objetos. Si no has instalado el SSMS, también se puede hacer transmitiendo un comando SQL del tipo "create database... for attach" o llamando al procedimiento almacenado "sp_attach_db" si es una versión antigua.

    • Marcado como respuesta Jose Manuel44 jueves, 7 de mayo de 2020 19:51
    miércoles, 6 de mayo de 2020 7:37
  •  según veo tendría que configurar puertos, firewall, establecer reglas y otras cosas mas

    Depende. Si en tu Windows hay un Firewall entonces sí, tienes que configurar el Firewall del equipo en el que está instalado SQL Server de tal manera que permita el acceso a SQL Server. La manera de hacer esto varía según la versión del Firewall que tenga tu Windows, pero en general no debería ser demasiado complicado; basta con buscar la opción de "permitir el acceso al siguiente programa..." y elegir el SQL Server.

    Pero esto ya no es una labor de programación; tu programa en sí mismo no se ve afectado, es algo que correspondería al administrador de sistemas. Lo cual no significa que un desarrollador de aplicaciones no pueda tener unos ligeros conocimientos de administración de sistemas, para poder probar estas cosas en el entorno de desarrollo. No es particularmente complicado; se puede aprender bastante rápido cómo configurar un Firewall para estos casos sencillos.

    La otra cosa que te hará falta es habilitar el acceso externo en el SQL Server. Esto es una opción que se encuentra en las Propiedades de la instancia en SQL Server Management Studio. De manera predeterminada, en un SQL Server recién instalado, esta opción está desactivada.

    • Marcado como respuesta Jose Manuel44 jueves, 7 de mayo de 2020 19:52
    miércoles, 6 de mayo de 2020 7:44