none
Elegir a que Base de Datos conectarme vb.net 2008 y SQL server 2008 ? RRS feed

  • Pregunta

  • Hola estimados tengo un sistema echo con vb.net me surgió una problemática que tengo 2 bases de datos la cual una es la normal y la otra es una auxiliar entonces lo que necesito agregar al sistema que me de la opción de conectarme por la base normal o la auxiliar, tener las conexiones en un combobox o algo parecido.

    Saludos cordiales.


    Ale Zidane

    miércoles, 6 de enero de 2016 14:18

Respuestas

  • "ale zidane" escribió:

    > De esta forma lo hago no cacho como tener esas conexiones a la base
    > en una varibles y cargar algun combo para elegir entre una u otra.
    >
    >   Public Shared Function Cargar_Terminales_programacion()

    Hola:

    Si en tu clase tienes declarado un procedimiento Function, se encuentre o no compartido (Shared), lo primero que tienes que hacer es declararlo correctamente para indicarle que devuelva un tipo de dato, en tu caso un objeto DataTable:

        Public Shared Function Cargar_Terminales_programacion(nombreCadenaConexion As String) As DataTable
    
            Dim dt As New DataTable()
    
            Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings(nombreCadenaConexion).ToString())
                Dim cmd As SqlCommand = conn.CreateCommand()
                cmd.CommandText = "SELECT [NumTerminal], [Terminal], [Zona] " &
                                  "FROM [ProgCond].[TB_Terminales_Prog];"
                Dim da As New SqlDataAdapter(cmd)
                da.Fill(dt)
            End Using
    
            Return dt
    
        End Function
    

    Observa que a parte de incluir el tipo de dato que devuelve la función, también le añadido un parámetro, que será el nombre de la cadena de conexión existente en tu archivo de configuración que deseas utilizar.

    > <add name="conexionVule"
    >           connectionString="Data Source=Programacion;Initial Catalog=BDVULE;User id=SGPI;password=sql1234"
    >           providerName="System.Data.SqlClient" />
    >
    > <add name="conexionVule"
    >           connectionString="Data Source=Programacion;Initial Catalog=BDVULEAUXILIAR;User > id=SGPI;password=sql1234"
    >              providerName="System.Data.SqlClient" />

    Lo segundo que tienes que hacer es DIFERENCIAR las dos cadenas de conexión que tienes en tu app.config, porque si las dos tienen el mismo nombre, lo único que puedes obtener es una excepción del tipo ConfigurationErrosException cuando se ejecute la propiedad ConfigurationManager.ConnectionStrings, por tanto, mejor será que a una la llames "Principal" y a otra "Auxiliar":

    <connectionStrings>

      <add name="Principal" connectionString="Data Source=Programacion;Initial Catalog=BDVULE;User id=SGPI;password=sql1234"
               providerName="System.Data.SqlClient" />
     
      <add name="Auxiliar" connectionString="Data Source=Programacion;Initial Catalog=BDVULEAUXILIAR;User id=SGPI;password=sql1234"
           providerName="System.Data.SqlClient" />

    </connectionStrings>

    Ahora, si el nombre de las dos cadenas las tienes en un control ComboBox, llamarías a la función de la siguiente manera:

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            ComboBox1.Items.Add("Principal")
            ComboBox1.Items.Add("Auxiliar")
            ComboBox1.SelectedIndex = 0
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                Dim dt As DataTable = Cargar_Terminales_programacion(ComboBox1.Text)
    
                ' Ejecutar aquí lo que proceda.
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    jueves, 7 de enero de 2016 6:26
    Moderador
  • Bien, pero ¿dónde está el problema? No tienes más que cargar un combo con dos opciones que sean "Principal" y "Auxiliar", y si eligen la primera entonces metes una cadena de conexión en el constructor del SqlConnection y si eligen la otra metes la otra cadena. ¿Cuál es exactamente la parte que no sabes hacer?
    miércoles, 6 de enero de 2016 17:00

Todas las respuestas

  • Bien, pero ¿dónde está el problema? No tienes más que cargar un combo con dos opciones que sean "Principal" y "Auxiliar", y si eligen la primera entonces metes una cadena de conexión en el constructor del SqlConnection y si eligen la otra metes la otra cadena. ¿Cuál es exactamente la parte que no sabes hacer?
    miércoles, 6 de enero de 2016 17:00
  • Hola estimado los tengo en mi app.config 

    Conexión Normal :

    <add name="conexionVule"
                 connectionString="Data Source=Programacion;Initial Catalog=BDVULE;User id=SGPI;password=sql1234"
                 providerName="System.Data.SqlClient" />

    Conexión Auxiliar :

    <add name="conexionVule"
                 connectionString="Data Source=Programacion;Initial Catalog=BDVULEAUXILIAR;User id=SGPI;password=sql1234"
                 providerName="System.Data.SqlClient" />

    Con una clase accedo a ella :

        Public Shared Function Cargar_Terminales_programacion()
            '
            Dim sql As String = "SELECT [NumTerminal] " & _
                                "      ,[Terminal] " & _
                                "      ,[Zona] " & _
                                "  FROM [ProgCond].[TB_Terminales_Prog] "
            '
            Dim dt As New DataTable
            Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("conexionVule").ToString())
                Dim cmd As New SqlCommand(sql, conn)
                Dim da As New SqlDataAdapter(cmd)
                da.Fill(dt)
            End Using
            Return dt
        End Function

        De esta forma lo hago no cacho como tener esas conexiones a la base en una varibles y cargar algun combo para elegir entre una u otra.

    Saludos cordiales 


    Ale Zidane

    miércoles, 6 de enero de 2016 18:08
  • Hola,

    Puedes ver una forma de hacerlo en el siguiente artículo:

    http://stackoverflow.com/questions/16341257/obtaining-databases-from-sql-server-2008-using-vb-in-vs-2012



    Espero le sea de ayuda.



    Saludos cordiales,



    Alberto Morillo
    SQLCoffee.com

    miércoles, 6 de enero de 2016 18:23
  • "ale zidane" escribió:

    > De esta forma lo hago no cacho como tener esas conexiones a la base
    > en una varibles y cargar algun combo para elegir entre una u otra.
    >
    >   Public Shared Function Cargar_Terminales_programacion()

    Hola:

    Si en tu clase tienes declarado un procedimiento Function, se encuentre o no compartido (Shared), lo primero que tienes que hacer es declararlo correctamente para indicarle que devuelva un tipo de dato, en tu caso un objeto DataTable:

        Public Shared Function Cargar_Terminales_programacion(nombreCadenaConexion As String) As DataTable
    
            Dim dt As New DataTable()
    
            Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings(nombreCadenaConexion).ToString())
                Dim cmd As SqlCommand = conn.CreateCommand()
                cmd.CommandText = "SELECT [NumTerminal], [Terminal], [Zona] " &
                                  "FROM [ProgCond].[TB_Terminales_Prog];"
                Dim da As New SqlDataAdapter(cmd)
                da.Fill(dt)
            End Using
    
            Return dt
    
        End Function
    

    Observa que a parte de incluir el tipo de dato que devuelve la función, también le añadido un parámetro, que será el nombre de la cadena de conexión existente en tu archivo de configuración que deseas utilizar.

    > <add name="conexionVule"
    >           connectionString="Data Source=Programacion;Initial Catalog=BDVULE;User id=SGPI;password=sql1234"
    >           providerName="System.Data.SqlClient" />
    >
    > <add name="conexionVule"
    >           connectionString="Data Source=Programacion;Initial Catalog=BDVULEAUXILIAR;User > id=SGPI;password=sql1234"
    >              providerName="System.Data.SqlClient" />

    Lo segundo que tienes que hacer es DIFERENCIAR las dos cadenas de conexión que tienes en tu app.config, porque si las dos tienen el mismo nombre, lo único que puedes obtener es una excepción del tipo ConfigurationErrosException cuando se ejecute la propiedad ConfigurationManager.ConnectionStrings, por tanto, mejor será que a una la llames "Principal" y a otra "Auxiliar":

    <connectionStrings>

      <add name="Principal" connectionString="Data Source=Programacion;Initial Catalog=BDVULE;User id=SGPI;password=sql1234"
               providerName="System.Data.SqlClient" />
     
      <add name="Auxiliar" connectionString="Data Source=Programacion;Initial Catalog=BDVULEAUXILIAR;User id=SGPI;password=sql1234"
           providerName="System.Data.SqlClient" />

    </connectionStrings>

    Ahora, si el nombre de las dos cadenas las tienes en un control ComboBox, llamarías a la función de la siguiente manera:

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            ComboBox1.Items.Add("Principal")
            ComboBox1.Items.Add("Auxiliar")
            ComboBox1.SelectedIndex = 0
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                Dim dt As DataTable = Cargar_Terminales_programacion(ComboBox1.Text)
    
                ' Ejecutar aquí lo que proceda.
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    jueves, 7 de enero de 2016 6:26
    Moderador