none
PROBLEMA CON NO SE HA INICIALIZADO LA PROPIEDAD CONNECTION STRING

    Pregunta

  • Hola, buenas mi problema es el siguiente tengo una base de acces conectada a vb.net 2008 , quiero que al buscar por numero de codigo me traiga todos los datos , en el datagrid , el error que me sale es el siguiente : No se ha inicializado la propiedad  ConnectionString , por favor si alguien me podria ayudar...

    esta es la linea de mi codigo :

    Imports System.Data
    Imports System.Data.OleDb

    Public Class Form3
        Dim conexion As New OleDbConnection
        Dim adaptador As New OleDbDataAdapter
        Dim registros As New DataSet


     

        Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'TODO: esta línea de código carga datos en la tabla 'BaseProductosDataSet.Productos' Puede moverla o quitarla según sea necesario.
            'Me.ProductosTableAdapter.Fill(Me.BaseProductosDataSet.Productos)

        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim consultar As String
            Dim lista As Byte
            If Codigo_de_ProductoTextBox.Text <> "" Then
                consultar = "SELECT* FROM Productos WHERE Codigo de Producto = '"(Codigo_de_ProductoTextBox.Text)
                adaptador = New OleDbDataAdapter(consultar, conexion)
                registros = New DataSet
                adaptador.Fill(registros, "Productos")
                lista = registros.Tables("Productos").Rows.Count
                If lista <> 0 Then
                    ProductosBindingSource.DataSource = registros
                    ProductosBindingSource.DataMember = "Productos"
                Else
                    MsgBox("No hay registro introducido")
                    Codigo_de_ProductoTextBox.Clear()
                    Codigo_de_ProductoTextBox.Focus()

                End If


            End If

        End Sub



    End Class


    domingo, 5 de marzo de 2017 22:05

Respuestas

  • De acuerdo en que falta pasarle la cadena de conexión al OleDbConnection, pero en cambio no estoy de acuerdo en que debas meter una llamada a conexion.Open. El DataAdapter tiene la característica de que si se encuentra la conexión cerrada, automáticamente la abre, la usa, y la cierra. Si se la abres antes a mano, entonces te tienes que acordar de cerrarla. Esto se hace a veces cuando vas a usar muchas llamadas a los métodos del dataadapter, para que no sea necesario que cada una de ellas abra y cierre la conexión. Pero si vas a hacer una sola llamada, es preferible que NO abras la conexión y dejes que el propio dataadapter se encargue de abrirla y cerrarla.
    lunes, 6 de marzo de 2017 7:54
  • "alán" escribió:

    > el error que me sale es el siguiente : No se ha inicializado la propiedad  ConnectionString ...

    Hola:

    Como bien te han comentado los compañeros, el problema se debe a que precisamente no le has especificado la cadena de conexión al objeto OleDbConnection que estás utilizando para establecer la conexión con la base de datos de Access.

    > consultar = "SELECT* FROM Productos WHERE Codigo de Producto = '"(Codigo_de_ProductoTextBox.Text)

    Pero si solucionas el error anterior, después te aparecerán otros diferentes debido a que el nombre del campo 'Codigo de Producto' aparecen espacios en blanco, y éste lo tendrás que encerrar entre corchetes.

    La verdad es que ignoro si te has equivocado al escribir el código en el mensaje, pero me extraña que el compilador de Visual Basic te permita compilar esa línea de código porque falta CONCATENAR el valor de la propiedad Text del supuesto control TextBox a la consulta SQL de selección, valor éste que deberá estar encerrado entre comillas simples si se trata de un valor alfanumérico:

        consultar = "SELECT * FROM Productos WHERE [Codigo de Producto] = '" & Codigo_de_ProductoTextBox.Text & "'"

    Mejor será que sustituyas el código que has publicado por el que te indico a continuación:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Modifica la cadena de conexión para adaptarla a tus necesidades.
            Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Mis documentos\Database1.accdb"
    
            If (Codigo_de_ProductoTextBox.TextLength <> 0) Then
                Try
                    ' Crear y configurar la conexión
                    Using conexion As New OleDbConection(cadenaConexion)
    
                        ' Crear y configurar el parámetro
                        Dim comando As OleDbCommand = conexion.CreateCommand()
                        comando.CommandText = "SELECT * FROM Productos WHERE [Codigo de Producto] = @idProducto"
    
                        ' Añadir el único parámetro de entrada existente
                        comando.Parameters.AddWithValue("@idProducto", Codigo_de_ProductoTextBox.Text)
    
                        ' Crear el adaptador de datos
                        Dim adaptador As New OleDbDataAdapter(comando)
    
                        ' Crear un nuevo objeto DataTable
                        Dim table As New DataTable("Productos")
    
                        ' Rellenar el objeto DataTable
                        adaptador.Fill(table)
    
                        ' Asignamos el objeto DataTable al objeto BindingSource
                        ProductosBindingSource.DataSource = table
    
                        Dim count As Integer = table.Rows.Count
                        If (count = 0) Then
                            MessageBox.Show("No hay registro introducido")
                            Codigo_de_ProductoTextBox.Clear()
                            Codigo_de_ProductoTextBox.Focus()
                        End If
                    End Using
    
                Catch ex As Exception
                    ' Se ha producido un error
                    MessageBox.Show(ex.Message)            
    
                End Try
    
            End If

    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.




    lunes, 6 de marzo de 2017 8:43
    Moderador

Todas las respuestas

  • En la linea 
    Dim conexion As New OleDbConnection
    debes pasar como parámetro la cadena de conexión a la base de datos (ConnectionString), y antes de la linea
    adaptador = New OleDbDataAdapter(consultar, conexion)
    tienes que abrir la conexión haciendo conexion.Open()


    Saludos, Javier J

    lunes, 6 de marzo de 2017 7:48
  • De acuerdo en que falta pasarle la cadena de conexión al OleDbConnection, pero en cambio no estoy de acuerdo en que debas meter una llamada a conexion.Open. El DataAdapter tiene la característica de que si se encuentra la conexión cerrada, automáticamente la abre, la usa, y la cierra. Si se la abres antes a mano, entonces te tienes que acordar de cerrarla. Esto se hace a veces cuando vas a usar muchas llamadas a los métodos del dataadapter, para que no sea necesario que cada una de ellas abra y cierre la conexión. Pero si vas a hacer una sola llamada, es preferible que NO abras la conexión y dejes que el propio dataadapter se encargue de abrirla y cerrarla.
    lunes, 6 de marzo de 2017 7:54
  • Bien visto Alberto. La verdad es que yo suelo trabajar con using pero en este caso es mejor como tu dices. 

    Saludos, Javier J

    lunes, 6 de marzo de 2017 8:12
  • "alán" escribió:

    > el error que me sale es el siguiente : No se ha inicializado la propiedad  ConnectionString ...

    Hola:

    Como bien te han comentado los compañeros, el problema se debe a que precisamente no le has especificado la cadena de conexión al objeto OleDbConnection que estás utilizando para establecer la conexión con la base de datos de Access.

    > consultar = "SELECT* FROM Productos WHERE Codigo de Producto = '"(Codigo_de_ProductoTextBox.Text)

    Pero si solucionas el error anterior, después te aparecerán otros diferentes debido a que el nombre del campo 'Codigo de Producto' aparecen espacios en blanco, y éste lo tendrás que encerrar entre corchetes.

    La verdad es que ignoro si te has equivocado al escribir el código en el mensaje, pero me extraña que el compilador de Visual Basic te permita compilar esa línea de código porque falta CONCATENAR el valor de la propiedad Text del supuesto control TextBox a la consulta SQL de selección, valor éste que deberá estar encerrado entre comillas simples si se trata de un valor alfanumérico:

        consultar = "SELECT * FROM Productos WHERE [Codigo de Producto] = '" & Codigo_de_ProductoTextBox.Text & "'"

    Mejor será que sustituyas el código que has publicado por el que te indico a continuación:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Modifica la cadena de conexión para adaptarla a tus necesidades.
            Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Mis documentos\Database1.accdb"
    
            If (Codigo_de_ProductoTextBox.TextLength <> 0) Then
                Try
                    ' Crear y configurar la conexión
                    Using conexion As New OleDbConection(cadenaConexion)
    
                        ' Crear y configurar el parámetro
                        Dim comando As OleDbCommand = conexion.CreateCommand()
                        comando.CommandText = "SELECT * FROM Productos WHERE [Codigo de Producto] = @idProducto"
    
                        ' Añadir el único parámetro de entrada existente
                        comando.Parameters.AddWithValue("@idProducto", Codigo_de_ProductoTextBox.Text)
    
                        ' Crear el adaptador de datos
                        Dim adaptador As New OleDbDataAdapter(comando)
    
                        ' Crear un nuevo objeto DataTable
                        Dim table As New DataTable("Productos")
    
                        ' Rellenar el objeto DataTable
                        adaptador.Fill(table)
    
                        ' Asignamos el objeto DataTable al objeto BindingSource
                        ProductosBindingSource.DataSource = table
    
                        Dim count As Integer = table.Rows.Count
                        If (count = 0) Then
                            MessageBox.Show("No hay registro introducido")
                            Codigo_de_ProductoTextBox.Clear()
                            Codigo_de_ProductoTextBox.Focus()
                        End If
                    End Using
    
                Catch ex As Exception
                    ' Se ha producido un error
                    MessageBox.Show(ex.Message)            
    
                End Try
    
            End If

    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.




    lunes, 6 de marzo de 2017 8:43
    Moderador
  • Todo bien con el codigo que me dan pero, pero aun cuando pongo el codigo me salta el messasge del ejemplo que me 

    han dado , el de catch exeption , messagebox, eso es todo , no se si tenga que habilitar el datagrid, con enabled, o algo,

    si eso es todo..

    sábado, 11 de marzo de 2017 14:57
  • "alán" escribió:

    > pero aun cuando pongo el codigo me salta el messasge del ejemplo que me
    > han dado , el de catch exeption , messagebox, eso es todo , no se si tenga
    > que habilitar el datagrid, con enabled, o algo, ...

    ¿Dices que te sigue apareciendo el mensaje de error No se ha inicializado la propiedad ConnectionString? Me extraña muchísimo que con el código que te he indicado en mi respuesta te aparezca dicho mensaje de error, porque en el mismo se está inicializando el objeto OleDbConnection con la cadena de conexión. Ahora bien, si se trata de otro mensaje de error diferente, no estaría de más que indicaras el mensaje de error EXACTO que obtienes, y el código que estás ejecutando para que te aparezca dicho error.

    Y si el error nuevo no tiene nada que ver con el error inicial (No se ha inicializado la propiedad ConnectionString), mejor será que inicies una pregunta nueva.


    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.


    sábado, 11 de marzo de 2017 16:20
    Moderador