Foros del Web » Programación para mayores de 30 ;) » .NET »

Cómo verifico si la bd a la que quiero acceder existe?

Estas en el tema de Cómo verifico si la bd a la que quiero acceder existe? en el foro de .NET en Foros del Web. Hola amigos, necesito la siguiente ayuda, después que el usuario ingresa los datos de conexión a la bd debo verificar primero que la bd exista ...
  #1 (permalink)  
Antiguo 13/04/2009, 10:32
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Pregunta Cómo verifico si la bd a la que quiero acceder existe?

Hola amigos, necesito la siguiente ayuda, después que el usuario ingresa los datos de conexión a la bd debo verificar primero que la bd exista y si no, la creo, estoy trabajando en vb.net (2005) con sqlserver 2000, y resulta que no sé cómo poner la condición de que "si existe la bd" , ya que he buscado en varias partes y no me funciona, he leído por ahí que tengo que llamar a la base datos master primero y llamar a una función como esta

If exist("select * from sysdatabases where name = 'mibd' ")return 1 else return 0 end

pero no la entiendo muy bien, no sé cómo implementarla.
Lo otro que si después creo la bd, debo crear todas las tablas?

Bueno, si alguien sabe algo, le agradezco su ayuda.
Saludos a todos.
  #2 (permalink)  
Antiguo 13/04/2009, 12:48
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Podrias Implementarlo de la Siguiente Manera en cuanto a verificar si existe tu BD

Código:
IF EXISTS(SELECT * FROM DBO.SYSDATABASES WHERE NAME = 'MIBD') -- SI EXISTE LA BASE DE DATOS CON ESTE NOMBRE ENTONCES HAREMOS LO SIGUIENTE
    BEGIN
             USE MASTER -- USAMOS UNA BASE DE DATOS DIFERENTE AL Q TENEMOS YA Q SI NO NO PODREMOS ELIMINARLO
             DROP DATABASE MIBD -- ELIMINAMOS LA BASE DE DATOS PORQ EXISTE
    END
   -- PROCEDEMOS A CREAR NUESTRA BASE DE DATOS
   CREATE DATABASE MIBD;
   -- USAMOS LA BASE DE DATOS
   USE MIBD
  
   -- PARA VERIFICAR SI UNA TABLA EXISTE HAY Q REALIZAR LO SIGUIENTE
  IF EXISTS(SELECT * FROM SYSOBJECTS WHERE XTYPE='U' AND NAME = 'NOMTABLA')
      DROP TABLE NOMTABLA
CREATE TABLE NOMTABLA
(
 -- COLUMNAS DE LA TABLA A CREAR
)
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 14/04/2009, 14:32
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Gracias, pero EXISTS es una función?, porque si lo coloco así tal cual el programa me dice que no se ha declarado el nombre "EXISTS", tampoco me reconoce la palabra USE ni DROP, la verdad no entiendo muy bien por qué si existe la bd hay que borrarla, y después crearla, y si no existe?
Bueno si me puedes explicar, te lo agradezco, sino, lo entenderé.
Saludos.
  #4 (permalink)  
Antiguo 14/04/2009, 23:00
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Bueno lo q yo te moste fue como verificar si existia la base de Datos es Cuestion tuya implementarlo al Reves si lo q quieres es q se cree si no exista lo harias de la siguiente manera
en caso de q no te funcione exists o exist pudes hacerlo de la siguiente manera

Código:
DECLARE @BD VARCHAR(100)
DECLARE @TBL VARCHAR(100)
SELECT @BD = NAME FROM DBO.SYSDATABASES WHERE NAME = 'MIBD'
IF NOT @BD IS NULL
     BEGIN
             -- PROCEDEMOS A CREAR NUESTRA BASE DE DATOS
            CREATE DATABASE MIBD;
     END

USE MIBD;

-- LO MISMO PARA LA TABLA
SELECT @TBL = NAME FROM SYSOBJECTS WHERE XTYPE='U' AND NAME = 'NOMTABLA'
IF NOT @TBL IS NULL
     BEGIN
             -- PROCEDEMOS A CREAR NUESTRA BASE DE DATOS
            CREATE TABLE NOMTABLA
           (
                   -- COLUMNAS DE LA TABLA A CREAR
           )
     END
-- PARA CREAR MAS TABLAS DEBES LIMPIAR LAS VARIABLES

SET @TBL = NULL

-- YA Q SI ENCONTRO DATOS ENTONCES A LA SIGUIENTE BUSQUEDA NO VA A SER NULO Y VA A CREAR LA TABLA GENERANDOTE ERROR
como decia si es q no existe lo creas y si existe pasa de alto es cuestion tuya q veas como vas a utilizarlo
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 15/04/2009, 09:19
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Ya lo resolví de una forma parecida, muchas gracias por tu ayuda y tu tiempo
  #6 (permalink)  
Antiguo 16/04/2009, 09:10
 
Fecha de Ingreso: abril-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

hola solangel queria saber como lo has resuelto, pq yo tb necesito una cosa parecida a lo que vos comentabas y me ayudaria mucho tu solucion, gracias. un Saludo. CLAUDIO
  #7 (permalink)  
Antiguo 16/04/2009, 15:16
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Hola Claudio,la verdad es que lo resolví de una manera, pero estoy buscando algo parecido a lo de Dradi7, pero lamentablemente cuando traté de implementar su código en mi editor de codigo de vb.net, había muchos errores sintánticos y no supe como resolverlos o traspasarlos a una forma legible por el vb.net, a todo esto estoy con vb.net 2005 y sqlserver2000.
Bueno de la forma que lo hice pregunto si la bd se encuentra en la carpeta predeterminada del sqlserver, así:

If File.Exists("C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\" & Txtbasedatos.Text & "") = True Then
conexionBD = New OdbcConnection("Driver={SQL Server};Server=" & Txtservidor.Text & ";Database=" & Txtbasedatos.Text & ";uid=" & Txtusuario.Text & ";pwd=" & Txtcontrasena.Text & ";connect timeout=" & Txttimeout.Text & "")
'si existe la bd me conecto a ella
Try
conexionBD.Open()
MsgBox("Conectado correctamente")
Catch ex As Exception ' SqlException
MsgBox("Error en la conexión")
MsgBox(ex.Message)
Finally
If (conexionBD.State = ConnectionState.Open) Then
conexionBD.Close()
End If
End Try
Else
If MessageBox.Show("¡NO existe la base de datos " & Txtbasedatos.Text & "!" & vbCrLf & _
"¿Desea crearla?", "No existe base de datos", _
MessageBoxButtons.YesNo) = DialogResult.Yes Then
Call Crea_BDSQL() 'si no existe pregunto al usuario si desea crearla y ahí llamo a una función que la crea
Else
Exit Sub
End If
End If

El problema es que esto resulta solo si el archivo de la bd está en la carpeta del sql y no en cualquier otra del pc, para eso debería cambiar esta sentencia

If File.Exists("C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\" & Txtbasedatos.Text & "") = True Then ...

por algo como esto

Dim SQL As String = "IF EXISTS (SELECT * FROM master..sysdatabases WHERE Name = " & Txtbasedatos.Text & " )"

y hasta ahí llego, estoy tratando de ver como se hace, porque supongo que EXISTS es una función

Bueno eso sería todo, espero que te ayude en algo y que ambos lo podamos resolver, saludos.
  #8 (permalink)  
Antiguo 16/04/2009, 16:48
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

y porq no tratas de conectarte primeramente a la base de datos Master y creas un procedimiento almacenado q te devuelva un valor

Código:
CREATE PROCEDURE(@NOMBRE VARCHAR(100), @I INT OUTPUT)
BEGIN
         DECLARE @BD VARCHAR(100)
         SELECT @BD = NAME FROM DBO.SYSDATABASES WHERE NAME = @NOMBRE
         IF NOT @BD IS NULL
                SET @I = 1
         ELSE
                SET @I = 0
END
y en tu .NET trata de recibir ese parametro output y dependiendo lo q te devulevas puedes conectarte a esa BD
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #9 (permalink)  
Antiguo 17/04/2009, 07:21
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Gracias Dradi, voy a intentarlo
  #10 (permalink)  
Antiguo 17/04/2009, 12:19
 
Fecha de Ingreso: abril-2009
Mensajes: 17
Antigüedad: 15 años
Puntos: 1
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

hola amigo...

fijate que yo hago lo mismo, pero con MySql

muy parecido al que tu manejas pero yo hago directa la conexion este donde este, sin necesidad de buscar un archivo

mi logica es cachar el error devuelto, no se si haya manipulacion de errores en SqlServer pero pues me imagino que si

ahi te va un ejemplo

creo mis conexiones y todo queda en un OdbcConecction

en el try manejo un SqlException
intento conectarme a la base de datos y si me regresa el error de que no existe la

y ese me regresa un numero de error
Error 1049 Unknow Database

y de ahi ya se que plan..

algo muy burdo pero pues se me hace sencillito y sin problemas

bueno saludos

Última edición por manoloss; 17/04/2009 a las 12:25
  #11 (permalink)  
Antiguo 20/04/2009, 07:13
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Ah, y cómo lo haces?, le mandas solo la cadena de conexión dentro del try?
  #12 (permalink)  
Antiguo 20/04/2009, 08:08
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Lo q dice nuestro amigo no seria una mala idea podrias capturar el error q te envia y dependiendo q error te genera entonces puedes conectarte o no
aqui el codigo
Código c#:
Ver original
  1. Boolean Bandera = false;
  2. try
  3. {
  4.      SqlConnection Con = new SqlConnection("SERVER=MISERVER;DATABASE=NOMBD;UID=SA;PWD=123;INTEGRATED SECURITY=FALSE");
  5.      Con.Open();
  6. }
  7. catch (System.Data.SqlClient.SqlException ex)
  8. {
  9.      if(ex.Number == 53)
  10.      {
  11.           MessageBox.Show(null, "El Servidor es Incorrecto o No Existe","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Information);
  12.      }
  13.      else if(ex.Number == 18456)
  14.     {
  15.           MessageBox.Show(null, "Usuario y/o Contraseña Incorrecta", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  16.     }
  17.     else if(ex.Number == 4060)
  18.     {
  19.           Bandera = true; //La Bandera Cambia de Valor
  20.           MessageBox.Show(null, "La Base de Datos No Existe o es Incorrecta", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  21.     }
  22. }
  23. if(Bandera)
  24. {
  25.      if(MessageBox.Show(null, "Desea Crear la Base de Datos", "Aviso", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.Ok)
  26.       {
  27.           // Procedimiento para Crear tu Base de Datos
  28.       }
  29. }
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #13 (permalink)  
Antiguo 20/04/2009, 13:52
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo verifico si la bd a la que quiero acceder existe?

Gracias Dradi, lo voy a adaptar a vb.net, me imagino que deben ser los mismos valores, los numeros.
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:50.