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
Ir a la versión completa