Base de datos en distintos ordenadores? - DotNetClubs
en

DotNetClubs

Comunidades de estudiantes entusiastas de la tecnología

Base de datos en distintos ordenadores?

Último artículo 02-19-2007 22:20 escrito por VicenteUAM. 17 respuestas.
Página 1 de 2 (18 elementos) 1 2 Siguiente >
Ordenar mensajes: Anterior Siguiente
  • 01-16-2007 17:19

    • Raúl
    • Contribuyente Top 75
    • Se unió el 01-16-2007
    • Envíos: 7
    • Puntos: 0

    Base de datos en distintos ordenadores?

    Hola.
    Estoy haciendo un proyecto con VS. NET 2003 en C# bajo Sql Server 2005 Express y Sql Server Management, y hace poco se sucedió lo siguiente.
    Tube que reinstalar Windows XP ajeno a mi voluntad, copie mi base de datos (.mdf y .ldf ) a la carpeta Data de la instalación del Sql Server, ejecute el programa y error, me di cuenta que no valía tal y como estaba antes, en el programa tengo la siguiente liena de conexión:
    SqlConnection cn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=basededatos;Integrated Security=True");

    Lo solucioné con el Management, en el Explorador de objetos, boton derecho sobre "Bases de datos" y darle a "Adjuntar", entonces ya elijes el .mdf y el .ldf y ya está.

    Pero esta solución para un proyecto, como que no me sirve.
    ¿ Se puede hacer una de estas dos cosas?:
    1.)Que teniendo el .mdf y el .ldf en la misma carpeta que el programa, lo detecte el Sql Server, pasando la ruta relativo o algo así
    2) En caso que no se pueda el anterior, que directamente poniendo los dos ficheros de la base de datos, el Sql Server se encargue de él, es decir, que lo añada y le reconozco automáticamente.

    Perdón por la parrafada, pero quería dejarlo lo más claro posible.

    Gracias.
                   
    • Puntos de post: 0
  • 01-17-2007 0:17 en respuesta a

    • VicenteUAM
    • Contribuyente Top 10
    • Se unió el 09-11-2006
    • Madrid
    • Envíos: 231
    • Puntos: 1,670
    • DotNetClub_Coordinadores
      DotNetClub_Miembros
      DotNetClubs_AdminTeam

    Re: Base de datos en distintos ordenadores?

    Para mi que te toca adjuntarla a mano. Porque dices que eso en un proyecto no te sirve? Un saludo!

    Vicente
    • Puntos de post: 0
  • 01-17-2007 10:36 en respuesta a

    • Raúl
    • Contribuyente Top 75
    • Se unió el 01-16-2007
    • Envíos: 7
    • Puntos: 0

    Re: Base de datos en distintos ordenadores?

    Hombre, no puedes presentar un proyecto donde tenas que instalar una tercera aplicación para hacer funcionar el programa, queda un poco cutre no crees?

    Salu2
    • Puntos de post: 0
  • 01-17-2007 11:04 en respuesta a

    • VicenteUAM
    • Contribuyente Top 10
    • Se unió el 09-11-2006
    • Madrid
    • Envíos: 231
    • Puntos: 1,670
    • DotNetClub_Coordinadores
      DotNetClub_Miembros
      DotNetClubs_AdminTeam

    Re: Base de datos en distintos ordenadores?

    Si tu base de datos es de un SQL Server, necesitas un SQL Server, no hay mucha salvación para eso (ni me parece cutre, es más, me parece lógico). Igual que si tu aplicación está en .NET necesitas tener instalado el Framework para que corra, pues lo mismo con tu base de datos ;)

    Un saludo!

    Vicente
    • Puntos de post: 0
  • 01-17-2007 11:18 en respuesta a

    • vargas
    • Contribuyente Top 10
    • Se unió el 07-11-2006
    • Sevilla
    • Envíos: 193
    • Puntos: 45

    Re: Base de datos en distintos ordenadores?

    También puede utilizar una cadena de conexión para que haga el attach a la BD según la necesidad.

    Teniendo en cuenta la opción

    1) Que teniendo el .mdf y el .ldf en la misma carpeta que el programa, lo detecte el Sql Server, pasando la ruta relativo o algo así

    Quiero decir, que podrías hacer una cadena de conexión tal que detectes del path donde se está ejecutando el assembly (System.Reflections.Assembly.GetExecutingAssembly()...) y a partir de ahí, se lo incluyas a una cadena de conexión tal qué así:

    Data Source=.\SQLEXPRESS;AttachDbFilename=[PATH HACIA EL MDF!!];Integrated Security=True;User Instance=True

    Así el usuario final no tiene por qué attach un archivo al Sql Server.

    • Puntos de post: 0
  • 01-17-2007 11:24 en respuesta a

    • VicenteUAM
    • Contribuyente Top 10
    • Se unió el 09-11-2006
    • Madrid
    • Envíos: 231
    • Puntos: 1,670
    • DotNetClub_Coordinadores
      DotNetClub_Miembros
      DotNetClubs_AdminTeam

    Re: Base de datos en distintos ordenadores?

    Todos los días se aprende algo nuevo :)
    • Puntos de post: 0
  • 01-17-2007 12:08 en respuesta a

    • Raúl
    • Contribuyente Top 75
    • Se unió el 01-16-2007
    • Envíos: 7
    • Puntos: 0

    Re: Base de datos en distintos ordenadores?

    VicenteUAM:
    Si tu base de datos es de un SQL Server, necesitas un SQL Server, no hay mucha salvación para eso (ni me parece cutre, es más, me parece lógico). Igual que si tu aplicación está en .NET necesitas tener instalado el Framework para que corra, pues lo mismo con tu base de datos ;)

    Un saludo!

    Vicente


    Creo que no me has entendido Vicente, me refiero a que el usuario final tenga que instalar el Management para agregar la base de datos.
    vargas:

    Quiero decir, que podrías hacer una cadena de conexión tal que detectes del path donde se está ejecutando el assembly (System.Reflections.Assembly.GetExecutingAssembly()...) y a partir de ahí, se lo incluyas a una cadena de conexión tal qué así:

    Data Source=.\SQLEXPRESS;AttachDbFilename=[PATH HACIA EL MDF!!];Integrated Security=True;User Instance=True

    Así el usuario final no tiene por qué attach un archivo al Sql Server.



    Eso es!!! A ver si soy capaz de conseguirlo, sino, te pido ayuda Vargas ;) Por que eso de assemble me suena a chino... Me imagino que con la linea de codigo del "Data Source= ...." poniendo en la Path un ruta relativa, de tal forma que busque en la misma carpeta del programa bastará no?  Tengo solo la duda del assemble y User Instance=true tampoco sé lo que es, la seguridad integrada sí, que es Windows quien se encarga de la seguridad.

    Gracias Vargas
    • Puntos de post: 0
  • 01-17-2007 12:37 en respuesta a

    • VicenteUAM
    • Contribuyente Top 10
    • Se unió el 09-11-2006
    • Madrid
    • Envíos: 231
    • Puntos: 1,670
    • DotNetClub_Coordinadores
      DotNetClub_Miembros
      DotNetClubs_AdminTeam

    Re: Base de datos en distintos ordenadores?

    Tenías razón, no te había entendido (fallo mio ;). Un saludo!

    Vicente
    • Puntos de post: 0
  • 01-17-2007 13:06 en respuesta a

    • vargas
    • Contribuyente Top 10
    • Se unió el 07-11-2006
    • Sevilla
    • Envíos: 193
    • Puntos: 45

    Re: Base de datos en distintos ordenadores?

    Lo del assembly te lo digo porque (creo) que en la cadena de conexión tienes que poner la ruta absoluta. Para poder obtenerla, debes saber dónde está el programa que se está ejecutando (el assembly).

    En fin, tú haz tus pruebas y cualquier duda que tengas, pregunta, que siempre estamos algunos por aquí (Vicente, JMSobrinos, ...) para poder responderte :D

    Saludos!!!
    • Puntos de post: 0
  • 01-17-2007 13:16 en respuesta a

    • VicenteUAM
    • Contribuyente Top 10
    • Se unió el 09-11-2006
    • Madrid
    • Envíos: 231
    • Puntos: 1,670
    • DotNetClub_Coordinadores
      DotNetClub_Miembros
      DotNetClubs_AdminTeam

    Re: Base de datos en distintos ordenadores?

    Para saber donde estás ejecutando lo mismo también te vale:

    Path.GetDirectory(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) (la de Vargas)
    System.AppDomain.CurrentDomain.BaseDirectory
    System.Windows.Forms.Application.StartupPath

    Un saludo!

    Vicente

    • Puntos de post: 0
  • 01-17-2007 13:54 en respuesta a

    • vargas
    • Contribuyente Top 10
    • Se unió el 07-11-2006
    • Sevilla
    • Envíos: 193
    • Puntos: 45

    Re: Base de datos en distintos ordenadores?

    Cambiando totalmente de topic...

    ¿Te has fijado la versatilidad de .NET para hacer las cosas? No sólo este caso, sino muchos otros más, dónde puedes hacer las cosas de una manera u otra :)

    En fin, sólo quería hacer un simple apunte... :) Esta es una de las cosas por las que digo que .Net MOLA :D
    • Puntos de post: 0
  • 02-17-2007 20:19 en respuesta a

    • Raúl
    • Contribuyente Top 75
    • Se unió el 01-16-2007
    • Envíos: 7
    • Puntos: 0

    Re: Base de datos en distintos ordenadores?

    Lo único que no he encontrado en .NET es un uso fácil y sencillo para respresentar gráficas, y he tenido que instalar un componente de otra empresa...

    Volviendo al tema. Si pongo esta línea:
    string ruta=System.AppDomain.CurrentDomain.BaseDirectory;
    SqlConnection cn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=basededatos;AttachDbFileName="+ruta+"basededatos.mdf;Integrated Security=True");

    Da error: "...error de Sistema Operativo 5: Acceso denegado".

    y si le meto al fnal el "User Instance=true", me da error al compilar.

    Qué más puedo hacer?

    Saludos.          
    • Puntos de post: 0
  • 02-18-2007 0:10 en respuesta a

    • vargas
    • Contribuyente Top 10
    • Se unió el 07-11-2006
    • Sevilla
    • Envíos: 193
    • Puntos: 45

    Re: Base de datos en distintos ordenadores?

    Vale...

    Vayamos por partes... algo que me choca un poco es la ruya que obtienes... por lo general, las rutas a directorios acaban sin el cáracter "\"... ¿has comprobado que realmente se pasa el string correctamente?

    Por otro lado... el directorio donde reside el mdf... tiene el usuario que ejecuta la aplicación o la cuenta Network Service acceso a este?

    Tercero, utiliza Integrated Security=SSPI; Esto indicará que es una conexión segura y fiable y que puede confiar en ella.

    Cuarto, especifica un nombre de base de datos con dbname para que el sql server tenga identificada la base de datos mientras la adjunta y así no tenga que adjuntarla cada vez que haces un cambio o cualquier cosa.

    Quinto y último, si sigue sin funcionar... intenta aportar más datos.
    • Puntos de post: 0
  • 02-18-2007 11:17 en respuesta a

    • Raúl
    • Contribuyente Top 75
    • Se unió el 01-16-2007
    • Envíos: 7
    • Puntos: 0

    Re: Base de datos en distintos ordenadores?

    Hola Vargas.

    La ruta se le pasa bien, y acaba en \ , si no acabar así, daría error pq se juntaría el nombre de la carpeta con el del archivo.

    Sobre el acceso, es posible que tubiera razón, estaba en la carpeta de documentos de un usuario antiguo, no el que inicia sesion en Windows Xp. La puse en c:/Debug y tras borrar el archivo .ldf, ha funcionado!!! sin tocar nada más.

    Sobre la seguridad entonces lo dejo como está no? Ya que así funciona...

    Y lo debname, hace falta ahora ya? es que no se donde ponerlo, aparte de que en Initial Catalog=basededatos, ya le paso el nombre.

    Me da miedo que el día de la defensa, me falle el invento. Que me recomendais? Por cierto, el .ldf no era importante?

    Saludos y muchas gracias Vargas.
    • Puntos de post: 0
  • 02-18-2007 11:22 en respuesta a

    • penyaskito
    • Contribuyente Top 25
    • Se unió el 08-17-2006
    • Sevilla
    • Envíos: 61
    • Puntos: 115
    • DotNetClub_Miembros

    Re: Base de datos en distintos ordenadores?

    El ldf es el fichero de log.

    Raúl:
    Sobre la seguridad entonces lo dejo como está no? Ya que así funciona...


    Espero que no siempre pienses así :)
    Christian López Espínola
    http://penyaskitodice.wordpress.com
    penyaskito AT sevilla.dotnetclubs.com
    • Puntos de post: 0
Página 1 de 2 (18 elementos) 1 2 Siguiente >
(c) DotNetClubs 2008
Ofrecido por Community Server (Commercial Edition)