none
Referencia a objeto no establecida como instancia de un objeto

    Pregunta

  • Buenas tardes.

    He aplicado diferentes respuestas que he encontrado para la solución de este error y no doy con la correcta. Este error se ha producido después de aplicar solución a otros que he ido corrigiendo y ya no sé por dónde seguir.

    Paso el código por si alguien es tan amable de darme alguna pista.

    Public Class AccesoBd
        Public Shared CadenaConexion As ConnectionStringSettings =
             ConfigurationManager.ConnectionStrings("cadena")
       
     'Public Shared CadenaConexion As String =
    'ConfigurationManager.ConnectionStrings("cadena").ConnectionString
        'no Public Shared CadenaConexion As String =
    '  ConfigurationManager.ConnectionStrings("cadena").ToString
    End Class
    
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Configuration
    
    Public Class Form3
    
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Try
                '    Dim cnn As New SqlConnection(AccesoBd.CadenaConexion.ToString)
                '   Using cnn
                Using cnn As New SqlConnection(AccesoBd.CadenaConexion.ConnectionString)
    
                    cnn.Open()
                    Dim scon As String = "SELECT id_c,id_c_c,id_c_ci,id_c_p,CPOSTAL," &
                                        "POBLACION,PAIS,NOMBRE " &
                                      "From ACREEDORES " '&
                    '               "Where (id_c=100000) Order By CPOSTAL"
                    Dim da As New SqlDataAdapter(scon, cnn)
                    Dim dt As New DataTable()
                    da.Fill(dt)
                    DGVA.DataSource = dt
                    DGVA.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                    DGVA.Columns("id_c").HeaderText = "CLAVE"
                    DGVA.Columns("CPOSTAL").HeaderText = "CÓDIGO POSTAL"
                    DGVA.Columns("id_c_c").HeaderText = "CÓDIGO POSTAL"
                    DGVA.Columns("POBLACION").HeaderText = "POBLACIÓN"
                    DGVA.Columns("id_c_ci").HeaderText = "POBLACIÓN"
                    DGVA.Columns("PAIS").HeaderText = "PAÍS"
                    DGVA.Columns("id_c_p").HeaderText = "PAIS"
                    DGVA.Columns("NOMBRE").HeaderText = "ACREEDOR"
                    DGVA.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
                    cnn.Close()
                End Using
                SqlConnection.ClearAllPools()
            Catch exc As Exception
                MessageBox.Show(exc.Message)
    
            End Try
    
    
        End Sub
    
     

    Creo que todo el error parte de la clase de AccesoBd.

    pongo el código del app.config

        </configSections>
        <connectionStrings>
            <add name="borrar.My.MySettings.BGESTIONConnectionString" connectionString="Data Source=LAPTOP-56DRNQST\SQLEXPRESS;Initial Catalog=BGESTION;Persist Security Info=True;User ID=sa;Password=Pruebas!$Ç"
                providerName="System.Data.SqlClient" />
        </connectionStrings>

    Ccmento que está añadida la refeerncia     System.configuration

    Muchas gracias y saludos.
      

    jueves, 15 de septiembre de 2016 17:31

Respuestas

  • Ángelroso,

    El error lo obtienes porque el nombre de la sección del archivo XML (App.Config) donde se encuentra la cadena de conexión no es el mismo al que tu haces referencia en tu aplicación:

    <add name="borrar.My.MySettings.BGESTIONConnectionString" connectionString="Data 


    Public Class AccesoBd
    Public Shared CadenaConexion As ConnectionStringSettings =
             ConfigurationManager.ConnectionStrings("cadena")


    El nombre de la sección en el archivo XML (atributo name) debe ser el mismo en la referencia:

    Public Class AccesoBd
    Public Shared CadenaConexion As ConnectionStringSettings =
             ConfigurationManager.ConnectionStrings("borrar.My.MySettings.BGESTIONConnectionString")

    De hecho, lo prudente será que uses un nombre corto.

    Te dejo algunas consideraciones adicionales:

    1. Puedes utilizar un ALIAS de columna en la lista de selección para colocar el nombre que tendrá la cabecera de las columnas, de tal modo que no tienes que hacerlo de manera manual posterior al enlace: SELECT id_c AS 'CLAVE', id_c_c AS 'CODIGO POSTAL', ...
    2. Si utilizas la instrucción Using no es necesario escribir el método SqlConecion.Close
    3. ¿Por qué limpias el pool de conexiones? Te recomiendo que quites la instrucción SqlConnection.ClearAllPools()


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Ángelroso jueves, 15 de septiembre de 2016 19:21
    jueves, 15 de septiembre de 2016 18:08

Todas las respuestas

  • Ángelroso,

    El error lo obtienes porque el nombre de la sección del archivo XML (App.Config) donde se encuentra la cadena de conexión no es el mismo al que tu haces referencia en tu aplicación:

    <add name="borrar.My.MySettings.BGESTIONConnectionString" connectionString="Data 


    Public Class AccesoBd
    Public Shared CadenaConexion As ConnectionStringSettings =
             ConfigurationManager.ConnectionStrings("cadena")


    El nombre de la sección en el archivo XML (atributo name) debe ser el mismo en la referencia:

    Public Class AccesoBd
    Public Shared CadenaConexion As ConnectionStringSettings =
             ConfigurationManager.ConnectionStrings("borrar.My.MySettings.BGESTIONConnectionString")

    De hecho, lo prudente será que uses un nombre corto.

    Te dejo algunas consideraciones adicionales:

    1. Puedes utilizar un ALIAS de columna en la lista de selección para colocar el nombre que tendrá la cabecera de las columnas, de tal modo que no tienes que hacerlo de manera manual posterior al enlace: SELECT id_c AS 'CLAVE', id_c_c AS 'CODIGO POSTAL', ...
    2. Si utilizas la instrucción Using no es necesario escribir el método SqlConecion.Close
    3. ¿Por qué limpias el pool de conexiones? Te recomiendo que quites la instrucción SqlConnection.ClearAllPools()


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Ángelroso jueves, 15 de septiembre de 2016 19:21
    jueves, 15 de septiembre de 2016 18:08
  • Muchas gracias, Williams.

    Lo he probado y perfecto.

    Yo, antes de molestar al foro, procuro sacar las soluciones buscando por Internet, y de ahí sale el error del "ClearAllPools" ya que leí en alguna web que era recomendable ponerlo.

    Reitero, muchas gracias y saludos.

    jueves, 15 de septiembre de 2016 19:25