none
conexion con base de datos sql server RRS feed

  • Pregunta

  • Buenas, tengo un sistema realizado en VS2005 y SQL Server, el cual fue instalado varias veces y funciono por largo tiempo sin problemas. La cuestion es que tras instalarlo nuevamente tras un formateo del equipo, y habiendo instalado la bd sql express 2005, me sale un error de conexion del tipo:

    Just-In-Time (JIT) en lugar de a este cuadro de diálogo.

    ************** Texto de la excepción **************
    System.Data.SqlClient.SqlException: No se puede abrir el archivo físico "C:\meprograms\recibos\bases\recibos_dat.mdf". Error del sistema operativo 32: "32(error not found)".
    No se puede abrir la base de datos "RECIBOS" solicitada por el inicio de sesión. Error de inicio de sesión.
    Error de inicio de sesión del usuario 'DESKTOP\Administrador'.


    La base de datos siempre la copie en un directorio de destino (el archivo del log y el mdf), no la adjunto a la instancia, por lo que especifico la ubicacion de los archivos en la cadena de conexion de la siguiente manera:

    connectionString="Persist Security Info=False;Integrated Security=SSPI;AttachDbFilename=C:\rutadelabase\recibos_dat.mdf;database=RECIBOS;server=(local)\SQLEXPRESS"             

    Esto siempre anduvo correctamente, la cuestion es que ahora me aparece el citado error, precisamente despues del primer uso, es decir si cierro la aplicacion y la vuelvo a ejecutar sale este error, por lo que debo reiniciar la isntancia para que vuelva a funcionar. Si consulto los procesos que consumen a la base de datos, veo que EL ARCHIVO .MDF QUEDA EN POSESION DEL PROCESO SYSTEM DEL USUARIO SYSTEM, esto puede ser posible??


    martes, 20 de marzo de 2012 0:24

Respuestas

  • Hola.

    Después de muchas más vueltas, seguimos sin saber si tienes o no habilitadas las User Intances. Si ese es tu modo de trabajo (puede que te sirva en tu caso, es algo más lento de arrancar, pero tiene otras ventajas), utiliza user intances. Lo que no es buena idea es que no las utilices y que pretendas emular ese comportamiento por programación.

    Ese es el punto central, lo demás es secundario y sólo está contribuyendo a liarte más. Dinos si tienes o no configurado tu servidor así y si es así como quieres tenerlo.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 1 de abril de 2012 11:05
    Moderador

Todas las respuestas

  • Es posible que la base de datos no se cierre bien y se quede unida a la instancia. Al reiniciar la instancia la libera.  Yo procuraría dejarla adjuntada siempre. Es más eficiente y te evitaras este tipo de problemas.

    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 20 de marzo de 2012 8:59
    Moderador
  • Hola.

    Estás utilizando de User Instances. Para ello, debes habilitar la propiedad correspondiente en esta nueva instalación. Revisa los dos links que te adjunto:

    http://technet.microsoft.com/es-es/library/ms187513.aspx

    http://technet.microsoft.com/es-es/library/ms143684.aspx

    Si no logras resolverlo, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    martes, 20 de marzo de 2012 9:27
    Moderador
  • Ante todo, gracias por tu ayuda. Lo que no me queda bien claro es por que esto se presenta ahora, siendo que se descarga la misma version de sql express que se instalo en su momento, y no se ha modificado nada del programa ni de la conexion?

    agrego:

    Buscando en la web, encontre lo siguiente en un foro, que me da que es lo mismo que me esta sucediendo, aqui pego parte del texto:

    "....Tengo un problema con el servidor corporativo de SQL Server que ya es la
    segunda vez que me pasa. Si detengo el proceso y lo vuelvo a iniciar, el
    sqlserver ya no puede ocupar el puerto 1433 para recibir conexiones. Si se
    checa quien tiene ocupado el puerto, resulta que es el proceso System (!?).
    Es necesario reiniciar el servidor para que el sqlserver pueda ocupar
    nuevamente el puerto 1433...."

    es probable que sea el mismo problema??

    martes, 20 de marzo de 2012 13:03
  • Hola.

    Verifica el valor de esa propiedad ("user instances enabled") con sp_configure. 

    Lo otro que indicas no aplica a tu caso, entiendo que estás trabajando en local.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    martes, 20 de marzo de 2012 13:43
    Moderador
  • ok, cuando lo pruebe te comentare el resultado. Una duda, puede tener algo que ver la configuracion de los protocolos del Configuration Manager? En una conexion local deberia tener solo habilitado el protocolo de Memoria Compartida como viene por defecto?
    martes, 20 de marzo de 2012 15:03
  • Como dice Alberto eso no tiene que ver con tu caso. Los protocolos que acepta SQL Server no influyen en user instances (hasta donde yo se) El que tengas o no habilitado TCP-ip solo servirá para si desde otros puestos puede conectarse a tu bbdd, si siempre trabajas en local con solamente memoria compartida sería suficiente. En cualquier caso el protocolo se puede forzar como parte de la cadena de conexión. En este artículo puedes ver como se define el protocolo en la cadena de conexión

    http://www.connectionstrings.com/Articles/Show/define-sql-server-network-protocol


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 20 de marzo de 2012 19:23
    Moderador
  • 1. ---

    matias p dice,

    La cuestion es que tras instalarlo nuevamente tras un formateo del equipo

    ---

    Esto se puede deber a que el usuario que utiliza(cuenta integrada o usuario de windows, como lo indica en la cadena de conection(Integrated Security=SSPI)) para conectarte a la bbdd este corrupto debido al formateo del equipo

    Recomendaciones:

    Si no puede atacharlo por el server manager, puede hacerlo por el VS

    1. Inicia el VS como administrador y por el server explorer realiza este procedimiento

    esto hara que la base de bbdd quede atachada al motor del SQL. Una vez atachado, cambia el propietario de la bbdd a algun usuario interno de la bbdd para que no tenga problema en el futuro, algo como esto

    Mediante codigo

    --Cambiar el propietario de la base de datos actual.
    use[DatabaseName]
    go
    
    EXEC sp_changedbowner 'SA'
    go

    Mediante el server manager

    Dale un clic secundario encima de la bbdd y en la ventana de propiedad setea estos valores

    2. Creo que la version 2005 del SQL tiene una herramienta llamada Configuración de superficie de SQL Server, no recuerdo bien, se encuentra en el menú Inicio, Todos los programas, Microsoft SQL Server 2005 y Herramientas de configuración y. Esta herramienta te ayuda a cambiar el propietario de la bbdd a la cuenta integrada que tiene actualmente, verificate a ver.

    Configuración de superficie de SQL Server


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    martes, 20 de marzo de 2012 22:23
  • Buenas, he estado analizando con mas detalle el problema, y he encontrado que cada vez que se inicia la pc, el proceso SYSTEM se apodera del archivo .mdf en cuestion:

    he probado con lo de la instancia de usuario que me mencionó Alberto, pero no he logrado nada, tambien probé con adjuntar la base al motor, cambiando la cadena, pero tampoco resultó, es decir, debo finalizar el proceso SYSTEM para que la aplicacion pueda conectar a la base de datos. Osea, resumiendo, cada vez que se reinicia el equipo primero debo finalizar dicho proceso manualmente (el que se apodera del .mdf).

    jueves, 22 de marzo de 2012 3:45
  • Eso es por que la base de datos la tienes adjuntada y ahora tienes que desadjuntarla.

    prueba a ejecutar el comando sqlcmd -S.\SQLEXPRESS -E -Q "exec sp_detach_db 'recibos'"

    y mira si el proceso libera el archivo.

    El motivo es que

    1.- SQL SErver Express se ejecuta bajo la cuenta System

    2.- La base de datos la tienes adjuntada.

    Prueba y nos dices (otra cosa el script que te escribo se ejecuta en linea de comandos, lo que viene despues de -S es el nombre de servidor e instancia (.\SQLEXPRESS) -E indica que te conectes con seguridad integrada, dependiendo de como esté instalado tu sistema podrías necesitar ejecutar la consola de comandos en modo Administrador para que funcione. -Q indica ejecutar el query siguiente y salir, el query está sin probar.. en realidad todo el comando por lo que podría tener algún error sintactico, pero la idea es esa


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 22 de marzo de 2012 9:06
    Moderador
  • Buenas, gracias por tu respuesta. Te comento que la base de datos no esta adjuntada al motor al momento que se reinicia el equipo, esta la adjunto en el momento de la conexion con el comando AttachDbFilename, tambien he probado adjuntandola a la instancia de forma permanente pero el resultado  fue el mismo. Lo que mas llama la atencion es que siempre se conecto de forma local y de la misma manera.
    jueves, 22 de marzo de 2012 11:38
  • quieres decir que si ejecutas este comando

    sqlcmd -S.\SQLEXPRESS -E -Q "select * from sys.databases"

    ¿no aparece listada?


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 22 de marzo de 2012 12:07
    Moderador
  • yo suponia que al adjuntar la bd por cadena de conexion esta se desadjuntaba al cerrar la misma, que me sugieres que debo desadjuntarla cada vez que cierro la aplicacion?? Mas arriba me comentabas que esto es por que SQL SErver Express se ejecuta bajo la cuenta System; pero no deberia ser normal que la base quede adjuntada a la instancia??
    viernes, 23 de marzo de 2012 12:23
  • Hola.

    Después de muchas más vueltas, seguimos sin saber si tienes o no habilitadas las User Intances. Si ese es tu modo de trabajo (puede que te sirva en tu caso, es algo más lento de arrancar, pero tiene otras ventajas), utiliza user intances. Lo que no es buena idea es que no las utilices y que pretendas emular ese comportamiento por programación.

    Ese es el punto central, lo demás es secundario y sólo está contribuyendo a liarte más. Dinos si tienes o no configurado tu servidor así y si es así como quieres tenerlo.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 1 de abril de 2012 11:05
    Moderador