none
Como obtener la ruta de un archivo RRS feed

  • Pregunta

  • Hola a todos, mi problema es el siguiente:

    Tengo una clase en la cual creo una base de datos, pero me la crea en la siguiente carpeta "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\", quisiera que me la crease en la carpeta donde tengo el proyecto "c:\VB2010\appLinQ\BD\"

    la clase es la siguiente:

    Public Class Crearbasedatos
       Public Const StrdbMaster As String = "Server=(local)\SQLEXPRESS; database=master; integrated security=yes"
       ''' <sumary>Metodo para crear una base de datos</sumary>
       ''' <param name="cnnString">Cadena de conexion a la Base de datos</param>
       ''' <param name="baseDatos">Base de datos que se va a crear</param>
       ''' <returns>Devuelve Verdadero/Falso en la creacion de la base de datos</returns>
       Public Function CrearBaseDatos(ByVal cnnString As String, ByVal baseDatos As String) As Boolean
          Dim msj As New RbMensajes   'Crea un nuevo objeto para tener acceso a los mensajes de la dll (RbMessage)
          ' La conexión a usar
          Dim cnn As New SqlConnection(StrdbMaster)
          ' La orden T-SQL para crear la tabla
          Dim s As String = "CREATE DATABASE " & baseDatos
          Dim cmd As New SqlCommand(s, cnn)
          Try
             ' Abrimos la conexión y ejecutamos el comando
             cnn.Open()
             cmd.ExecuteNonQuery()
             msj.msjInformacion("Base de datos creada correctamente")
    
             Return True
          Catch ex As Exception
             msj.msjError("Error al crear la base de datos")
             Return False
          Finally
             ' Por si se produce un error, comprobar si la conexión está abierta
             If cnn.State = ConnectionState.Open Then
                cnn.Close()
             End If
          End Try
       End Function
    
    
    End Class

    ¿Como se hace para que me cree la base de datos en la carpeta que le indico?

    Un saludo.

    jueves, 10 de mayo de 2012 16:47

Respuestas

  • si revisa la info del

    CREATE DATABASE (Transact-SQL)

    veras que puede usar

    USE master;
    GO
    CREATE DATABASE Sales
    ON 
    ( NAME = Sales_dat,
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = Sales_log,
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB ) ;
    GO

    definiendo la ruta donde estaran los archivos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 10 de mayo de 2012 17:09

Todas las respuestas

  • si revisa la info del

    CREATE DATABASE (Transact-SQL)

    veras que puede usar

    USE master;
    GO
    CREATE DATABASE Sales
    ON 
    ( NAME = Sales_dat,
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = Sales_log,
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB ) ;
    GO

    definiendo la ruta donde estaran los archivos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 10 de mayo de 2012 17:09
  • Gracias Leando por acercarme tu respuesta, pero... ¿como se usa esto en VB?. Sé que parecere algo corto, pero todo esto es nuevo para mi.
    jueves, 10 de mayo de 2012 18:38
  • ¿como se usa esto en VB?

    pero ya tenias el codigo que ejecuta el CREATE DATABASE, solo que deberias conectarte a la db master configurando el connection string

    porque pr supuesto si la db la vas a crear no puede conectarete a esta

    sino la otra es usar la funcionalidad de SMO

    http://social.msdn.microsoft.com/Forums/en-US/sqlsmoanddmo/thread/80915c04-234f-4124-a31a-207149d1e4a9/

    pero para esto necesitas tener el sql server management studio yreferenciar las libreria de este

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 10 de mayo de 2012 20:36
  • Gracias de nuevo Leandro, yo mismo me habia hecho un ovillo monumental, ya lo tengo solucionado.

    Pongo el código por si a alguien se sirve como ejemplo.

    Public Class FrmLinQ
       Private Const NameBDLinQ As String = "dbPruebaLinQ"
       Private Const BDLinQ As String = "dbPruebaLinQ.mdf"
    
       Private Sub FrmLinQ_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    
            cnnStr = String.Format("CREATE DATABASE {0} ON ( NAME = {0}_dat, " & _
                     "FILENAME = 'C:\VB2010\appLinQ\BD\{0}.mdf', " & _
                     "SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) " & _
                     "LOG ON ( NAME = {0}_log," & _
                     "FILENAME = 'C:\VB2010\appLinQ\BD\{0}.ldf',SIZE = 5MB," & _
                     "MAXSIZE = 25MB,FILEGROWTH = 5MB )" & _
                     "COLLATE Modern_Spanish_CI_AI", NameBDLinQ)
    
            Dim msj As New RbMensajes   'Crea un nuevo objeto para tener acceso a los mensajes de la dll (RbMessage)
            If ExisteBBDD(BDLinQ) = False Then
                msj.msjInfOkCancel("La base de Datos no existe. ¿Quiere Crearla?")
                If DialogResult.OK Then
                    Dim bbdd As New Crearbasedatos
                    If (bbdd.CrearBaseDatos(cnnStr) = False Then
                        Close()
                    End If
    
                End If
            End If
        End Sub
    
    __________________________________________________________________________________
    Public Class Crearbasedatos
        Public Const StrdbMaster As String = "Server=(local)\SQLEXPRESS; database=; integrated security=yes"
    
        ' Public Const StrdbMaster As String = "Server=(local)\SQLEXPRESS; database=master; integrated security=yes"
        ''' <sumary>Metodo para crear una base de datos</sumary>
        ''' <param name="cnnString">Cadena de conexion a la Base de datos</param>
        ''' <returns>Devuelve Verdadero/Falso en la creacion de la base de datos</returns>
        Public Function CrearBaseDatos(ByVal cnnString As String) As Boolean
    
            Dim msj As New RbMensajes   'Crea un nuevo objeto para tener acceso a los mensajes de la dll (RbMessage)
    
            ' La conexión a usar
            Dim cnn As New SqlConnection(StrdbMaster)
    
            ' La orden T-SQL para crear la tabla
            Dim cmd As New SqlCommand(cnnString, cnn)
            Try
                ' Abrimos la conexión y ejecutamos el comando
                cnn.Open()
                cmd.ExecuteNonQuery()
                msj.msjInformacion("Base de datos creada correctamente")
    
                Return (True)
    
            Catch ex As Exception
                msj.msjError("Error al crear la base de datos")
                Return False
            Finally
                ' Por si se produce un error, comprobar si la conexión está abierta
                If cnn.State = ConnectionState.Open Then
                    cnn.Close()
                End If
            End Try
        End Function
    End Class

    sábado, 12 de mayo de 2012 11:26