none
No se ha inicializado la propiedad ConectionString

    Pregunta

  • Buenas, tengo una función metida en una clase que carga un Combobox:

    AL principio de la clase declaro SqlConection:

        'Conexión.
        Public Shared cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("Cnn").ToString())

        Shared Sub CargaComboProductosMantenimiento()
            Try
    
                Dim query As String = "SELECT codigo +' | '+  rtrim(descripcio) +' |  '+ ltrim(str(precventa)) AS Productos FROM gh"
                Dim cmd As New SqlCommand
                cmd.CommandText = query
                cmd.CommandType = CommandType.Text
                cmd.Connection = cnn
    
                Dim da As New SqlDataAdapter(cmd)
                Dim dt As New DataTable
                da.Fill(dt)
    
                'Llenamos el combo
                Mantenimiento_Productos.ComboBoxProductos.DataSource = dt
                Mantenimiento_Productos.ComboBoxProductos.DisplayMember = "Productos"
                Mantenimiento_Productos.ComboBoxProductos.ValueMember = "Productos"
    
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    En el Load del formulario donde esta el ComboBox, cargo el combo y no hay problema, el problema viene cuando doy de alta un producto nuevo y vuelvo a cargar el combo para que aparezca, ahí me da el error y no se como podría solucionarlo.


    • Editado J.Ramon jueves, 30 de marzo de 2017 11:27 as
    jueves, 30 de marzo de 2017 10:51

Respuestas

  • Hola, definir así tu conexión (a nivel de clase) es considerado mala práctica. Inicializa tu conexión dentro de tu método y emplea para ello bloques Using para liberar la conexión al pool de conexiones una vez terminado tu proceso.  

    Shared Sub CargaComboProductosMantenimiento()
    		Using cnn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Cnn").ToString())
    			Try
    				cnn.Open()
    				
    				Dim query As String = "SELECT codigo +' | '+  rtrim(descripcio) +' |  '+ ltrim(str(precventa)) AS Productos FROM gh"
    				Using cmd As SqlCommand =  New SqlCommand()
    					cmd.CommandText = query
    					cmd.CommandType = CommandType.Text
    					cmd.Connection = cnn
    
    					Dim da As New SqlDataAdapter(cmd)
    					Dim dt As New DataTable
    					da.Fill(dt)
    
    					'Llenamos el combo
    					Mantenimiento_Productos.ComboBoxProductos.DataSource = dt
    					Mantenimiento_Productos.ComboBoxProductos.DisplayMember = "Productos"
    					Mantenimiento_Productos.ComboBoxProductos.ValueMember = "Productos"
    				End Using
    			Catch ex As Exception
    				MsgBox(ex.ToString)
    			End Try
    		End Using
        End Sub


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra jueves, 30 de marzo de 2017 13:26
    • Propuesto como respuesta Joyce_ACModerator jueves, 30 de marzo de 2017 15:13
    • Marcado como respuesta J.Ramon jueves, 30 de marzo de 2017 16:01
    jueves, 30 de marzo de 2017 13:26
  • Cierro tema, ya esta solucionado...

    El problema lo tenía en una función que realizaba antes de guardar que me comprobaba si el código que había introducido ya existe.

    viernes, 31 de marzo de 2017 9:07

Todas las respuestas

  • hola después de la linea cmd. connection coloca cnn.Open y luego del da.fill coloca cnn.Close Saludos

    Si serví a tu consulta, no olvides votar como útil.

    jueves, 30 de marzo de 2017 11:56
  • Hola, definir así tu conexión (a nivel de clase) es considerado mala práctica. Inicializa tu conexión dentro de tu método y emplea para ello bloques Using para liberar la conexión al pool de conexiones una vez terminado tu proceso.  

    Shared Sub CargaComboProductosMantenimiento()
    		Using cnn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Cnn").ToString())
    			Try
    				cnn.Open()
    				
    				Dim query As String = "SELECT codigo +' | '+  rtrim(descripcio) +' |  '+ ltrim(str(precventa)) AS Productos FROM gh"
    				Using cmd As SqlCommand =  New SqlCommand()
    					cmd.CommandText = query
    					cmd.CommandType = CommandType.Text
    					cmd.Connection = cnn
    
    					Dim da As New SqlDataAdapter(cmd)
    					Dim dt As New DataTable
    					da.Fill(dt)
    
    					'Llenamos el combo
    					Mantenimiento_Productos.ComboBoxProductos.DataSource = dt
    					Mantenimiento_Productos.ComboBoxProductos.DisplayMember = "Productos"
    					Mantenimiento_Productos.ComboBoxProductos.ValueMember = "Productos"
    				End Using
    			Catch ex As Exception
    				MsgBox(ex.ToString)
    			End Try
    		End Using
        End Sub


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra jueves, 30 de marzo de 2017 13:26
    • Propuesto como respuesta Joyce_ACModerator jueves, 30 de marzo de 2017 15:13
    • Marcado como respuesta J.Ramon jueves, 30 de marzo de 2017 16:01
    jueves, 30 de marzo de 2017 13:26
  • Nada, he cambiado todo y me sigue apareciendo el mismo problema..

    Cuando entro y cargo el combobox perfecto, doy de alta un producto y ya me da el primer aviso de: No se ha inicializado la propiedad ConectionString...

    Así Cargo el ComboBox ahora:

        Shared Sub CargaComboProductosMantenimiento()
    
            Using con As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Cnn").ToString())
                Try
                    con.Open()
    
                    Dim query As String = "SELECT codigo +' | '+  rtrim(descripcio) +' |  '+ ltrim(str(precventa)) AS Productos FROM gh"
                    Using cmd As SqlCommand = New SqlCommand()
                        cmd.CommandText = query
                        cmd.CommandType = CommandType.Text
                        cmd.Connection = con
    
                        Dim da As New SqlDataAdapter(cmd)
                        Dim dt As New DataTable
                        da.Fill(dt)
    
                        'Llenamos el combo
                        Mantenimiento_Productos.ComboBoxProductos.DataSource = dt
                        Mantenimiento_Productos.ComboBoxProductos.DisplayMember = "Productos"
                        Mantenimiento_Productos.ComboBoxProductos.ValueMember = "Productos"
                    End Using
    
                Catch ex As Exception
                    MsgBox(ex.ToString)
                End Try
            End Using
    
        End Sub

    Y así guardo el nuevo producto...

                        Try
                            Using cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("Cnn").ToString())
                                'Damos de alta nuevo producto
                                cnn.Open()
                                Dim sql As String = "INSERT INTO GH (empresa, codigo, descripcio, iva, precventa) VALUES ('01" & "','" & Trim(txtcodigo.Text) & "','" & Trim(txtnombre.Text) & "','" & Trim(txtIVA.Text) & "','" & Trim(txtPVP.Text) & "')"
    
                                Dim CMD As New SqlCommand(sql, cnn)
                                CMD.ExecuteNonQuery()
                                MsgBox("Nuevo producto dado de alta correctamente.")
                            End Using
                            'Cargamos el combo:
                            Class_Conta.CargaComboProductosMantenimiento()
    
                        Catch ex As Exception
                            MsgBox(ex.Message)
                        End Try

    viernes, 31 de marzo de 2017 8:48
  • Cierro tema, ya esta solucionado...

    El problema lo tenía en una función que realizaba antes de guardar que me comprobaba si el código que había introducido ya existe.

    viernes, 31 de marzo de 2017 9:07