none
Cómo indicarle a un botón qué conexión del app.config utilice para imprimir un Reporte de Report Viewer RRS feed

  • Pregunta

  • Hola amigos

    Estoy ya un tanto desesperado con este asunto y realmente no encuentro cómo solucionarlo o si hay otra forma de realizarlo, les cuento...

    Estoy usando VS 2015 y SQL 2008 R2

    Necesito ejecutar un reporte hecho con Report Viewer por medio de un botón. El Report Viewer se alimenta a través de un DataSet; lo interesante es cómo indicarle al DataSet la conexión del archivo app.config que debe utilizar para mostrar la información adecuada dependiendo del servidor al que estamos conectados.

    Tengo un archivo app.config, el cual tiene dos conexiones a servidores diferentes, lo único que cambia de las conexiones es el nombre del dyndns y como tal el nombre de la conexión.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="Proyecto.Settings.PROConnectionString" connectionString="Data Source=proyecto.dyndns.com,1433;Initial Catalog=DATABASE;Persist Security Info=False;User ID=sa;Password=123"
                providerName="System.Data.SqlClient" />
            <add name="Proyecto.Settings.PROConnectionString1" connectionString="Data Source=proyecto2.dyndns.com,1433;Initial Catalog=DATABASE;Persist Security Info=False;User ID=sa;Password=123"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
    
        <system.diagnostics>
            <sources>
                <!-- This section defines the logging configuration for My.Application.Log -->
                <source name="DefaultSource" switchName="DefaultSwitch">
                    <listeners>
                        <add name="FileLog"/>
                        <!-- Uncomment the below section to write to the Application Event Log -->
                        <!--<add name="EventLog"/>-->
                    </listeners>
                </source>
            </sources>
            <switches>
                <add name="DefaultSwitch" value="Information" />
            </switches>
            <sharedListeners>
                <add name="FileLog"
                     type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
                     initializeData="FileLogWriter"/>
                <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
                <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
            </sharedListeners>
        </system.diagnostics>
    </configuration>

    Cuando el usuario ingresa a la aplicación, selecciona una base de datos y el nombre del dyndns se guarda en una variable que se llama ServidorActual; es por medio de esta variable de la cual me estoy apoyando para indicarle al reporte cuál conexión del app.config utilice, más sin embargo tengo algunos detalles que no he podido resolver inclusive no sé si como lo estoy haciendo es la forma más práctica.

    En el botón que imprime el reporte tengo este código:

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    
            If ServidorActual = "proyecto.dyndns.com" Then
                Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString").ToString)
                conx.Open()
                Formulario1.Show()
                Formulario1.SP_ConsultaTableAdapter.Fill(Formulario1.DataSet1.SP_Consulta, Me.TextBox2.Text, DateValue(Me.TextBox3.Text), DateValue(Me.TextBox4.Text))
                Formulario1.ReportViewer1.RefreshReport()
                conx.Close()
    
            ElseIf ServidorActual = "proyecto2.dyndns.com" Then
                Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString1").ToString)
                conx.Open()
                Formulario1.Show()
                Formulario1.SP_ConsultaTableAdapter.Fill(Formulario1.DataSet1.SP_Consulta, Me.TextBox2.Text, DateValue(Me.TextBox3.Text), DateValue(Me.TextBox4.Text))
                Formulario1.ReportViewer1.RefreshReport()
                conx.Close()
            End If
        End Sub

    Antes de compilar el código, en la parte de ConfigurationManager.ConnectionStrings me marca el mensaje:


    Y al ejecutarlo, cuando doy clic sobre el botón para imprimir el reporte me marca:

    Ya traté de corregir los errores pero no lo he logrado, alguna sugerencia al respecto, otra forma de hacerlo? Agradezco mucho su ayuda.

    Saludos.



    • Editado Zarpis lunes, 11 de diciembre de 2017 18:21
    lunes, 11 de diciembre de 2017 17:44

Respuestas

  • No tienes definido ningún valor de ConnectionStrings con el nombre "Settings". Deberás poner el nombre de la conexión que quieras usar pero tiene que ser alguno de los que hayas definido:

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString").ConnectionString)

    ó

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString1").ConnectionString)


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio martes, 12 de diciembre de 2017 23:32
    • Marcado como respuesta Pablo Rubio lunes, 18 de diciembre de 2017 15:24
    lunes, 11 de diciembre de 2017 18:07
  • La propiedad es .ConnectionString:

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString1").ConnectionString)


    Saludos, Javier J

    martes, 12 de diciembre de 2017 8:04

Todas las respuestas

  • No tienes definido ningún valor de ConnectionStrings con el nombre "Settings". Deberás poner el nombre de la conexión que quieras usar pero tiene que ser alguno de los que hayas definido:

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString").ConnectionString)

    ó

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString1").ConnectionString)


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio martes, 12 de diciembre de 2017 23:32
    • Marcado como respuesta Pablo Rubio lunes, 18 de diciembre de 2017 15:24
    lunes, 11 de diciembre de 2017 18:07
  • Si observas mi código Javier sí lo tengo, modifiqué la imagen por si causa confusión. Más sin embargo me marca el error que comento.

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString1").ToString)

    lunes, 11 de diciembre de 2017 18:18
  • La propiedad es .ConnectionString:

    Dim conx As New SqlConnection(ConfigurationManager.ConnectionStrings("Proyecto.Settings.PROConnectionString1").ConnectionString)


    Saludos, Javier J

    martes, 12 de diciembre de 2017 8:04