CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 Elegir Servidor al crear una Base de Datos SQL

(1/1)

HacKreatorz:
Buenas, estoy creando una aplicación en VB.NET 2008 y necesito que al pulsar un botón se cree una base de datos. Estoy siguiendo un tutorial de otra web. Estoy usando este código, modifiqué bastante el que salía en el tuto y se me quedó así:


--- Citar --- Dim str As String
                Dim myConn As SqlConnection = New SqlConnection("Server=127.0.0.1;" & _
                                                                "uid=sa;pwd=;database=master")
                str = "CREATE DATABASE MyDatabase ON PRIMARY " & _
                      "(NAME = MyDatabase_Data, " & _
                      " FILENAME = 'C:Archivos de programaAllDataBase ManagerBases de Datos'" & nombreBD & "'MyDatabaseData.mdf', " & _
                      " SIZE = 2MB, " & _
                      " MAXSIZE = 10MB, " & _
                      " FILEGROWTH = 10%) " & _
                      " LOG ON " & _
                      "(NAME = MyDatabase_Log, " & _
                      " FILENAME = 'C:Archivos de programaAllDataBase ManagerBases de Datos'" & nombreBD & "' MyDatabaseLog.ldf', " & _
                      " SIZE = 1MB, " & _
                      " MAXSIZE = 5MB, " & _
                      " FILEGROWTH = 10%) "

                Dim myCommand As SqlCommand = New SqlCommand(str, myConn)
                Try
                    myConn.Open()
                    myCommand.ExecuteNonQuery()
                    MessageBox.Show("   B ase de Datos creada correctamente", _
                                    "MyProgram", MessageBoxButtons.OK, _
                                     MessageBoxIcon.Information)
                Catch ex As Exception
                    MessageBox.Show(ex.ToString())
                    LabelInfoBD.Text = "Error al crear la base de datos"
                Finally
                    If (myConn.State = ConnectionState.Open) Then
                        myConn.Close()
                    End If
                End Try
                LabelInfoBD.Refresh()
            End If
--- Fin de la cita ---


No me funciona el código, le doy al botón pero se queda pillado, no se que es lo que está mal, no se si es el servidor que puse que me parece que es uno localhost que es lo que quiero...

agl0809:
Estoy seguro de que esta Clase te va a ayudar. Este ejemplo pertenece a un proyecto que he hecho hace poco. La clase se ejecuta en la instalación del programa, previamente añadida a "acciones personalizadas" del proyecto de instalación.


--- Código: vb.net ---  Imports System.ComponentModelImports System.Configuration.InstallImports System.ConfigurationImports System.Data.SqlClientImports System.IOImports System.Reflection Public Class ActualizaConfig     Public Sub New()        MyBase.New()         'El Diseñador de componentes requiere esta llamada.        InitializeComponent()         'Agregue el código de inicialización después de llamar a InitializeComponent     End Sub     Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)        MyBase.Install(stateSaver)        Dim directorio As String = Me.Context.Parameters.Item("directorio")        Dim servidor As String = Me.Context.Parameters.Item("server")        Dim execpath As String = String.Format("{0}AplicaOlivar2010.exe", directorio)        Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(execpath)        ''        Dim frm As New ElegirServidor()        frm.ShowDialog()        servidor = frm.ComboBox1.SelectedItem         config.ConnectionStrings.ConnectionStrings("Almazara2010Conexion").ConnectionString = "Data source=" _        & servidor & "; Initial Catalog=master; Integrated Security=True"        config.Save()         crearBaseDatos(config)     End Sub     Public Sub crearBaseDatos(ByVal config As Configuration)        Dim conexion As New SqlConnection(config.ConnectionStrings.ConnectionStrings("Almazara2010Conexion").ConnectionString)        Dim cmd As New SqlCommand("Create Database Almazara2010", conexion)         conexion.Open()        cmd.ExecuteNonQuery()        conexion.Close()        config.ConnectionStrings.ConnectionStrings("Almazara2010Conexion").ConnectionString = config.ConnectionStrings.ConnectionStrings("Almazara2010Conexion").ConnectionString.Replace("master", "Almazara2010")        config.Save()        conexion.ConnectionString = config.ConnectionStrings.ConnectionStrings("Almazara2010Conexion").ConnectionString         'Para cambiar la conectionstring segunda        config.ConnectionStrings.ConnectionStrings("WindowsApplication2.My.MySettings.Almazara2010ConnectionString").ConnectionString = config.ConnectionStrings.ConnectionStrings("Almazara2010Conexion").ConnectionString.Replace("master", "Almazara2010")        config.Save()        conexion.ConnectionString = config.ConnectionStrings.ConnectionStrings("WindowsApplication2.My.MySettings.Almazara2010ConnectionString").ConnectionString         'Crear las tablas        conexion.ConnectionString = config.ConnectionStrings.ConnectionStrings("WindowsApplication2.My.MySettings.Almazara2010ConnectionString").ConnectionString        Dim Command As New SqlClient.SqlCommand(GetSql("tablas.txt"), conexion)        Command.Connection.Open()        Command.ExecuteNonQuery()        Command.Connection.Close()     End Sub     Private Function GetSql(ByVal Name As String) As String        Try             ' Gets the current assembly.            Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()             ' Resources are named using a fully qualified name.            Dim strm As Stream = Asm.GetManifestResourceStream( _              Asm.GetName().Name + "." + Name)             ' Reads the contents of the embedded file.            Dim reader As StreamReader = New StreamReader(strm)            Return reader.ReadToEnd()         Catch ex As Exception            MsgBox("In GetSQL: " & ex.Message)            Throw ex        End Try    End Function   
Esta clase se apoya de un formulario muy siemple, que contiene un ComboBox que se rellena de los posibles servidores de DDBB que se encuentren activos en el equipo o en la red.


--- Código: vb.net ---  Imports System.Data.SqlImports System.Data.SqlClient Public Class ElegirServidor     Private Sub ElegirServidor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load           Dim instancia As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance        Dim tabla As DataTable = instancia.GetDataSources()         For Each fila As DataRow In tabla.Rows            If fila.ItemArray(1).ToString() = String.Empty Then                ComboBox1.Items.Add(fila.ItemArray(0).ToString())            Else                ComboBox1.Items.Add(fila.ItemArray(0).ToString() & "\" & fila.ItemArray(1).ToString())            End If        Next    End Sub     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Me.Close()    End Sub         Private Sub ElegirServidor_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown        Media.SystemSounds.Exclamation.Play()    End SubEnd Class   
Espero que te sirva de ayuda, el código funciona correctamente  :good:

HacKreatorz:
Muchas gracias por el comentario, ahora mismo estoy en época de exámenes y no voy a poder ponerme a mirarlo pero en cuanto pueda ya te comentaré si me ha funcionado. Gracias ;)

Navegación

[0] Índice de Mensajes

Ir a la versión completa