Ver Mensaje Individual
  #5 (permalink)  
Antiguo 03/01/2014, 15:18
serenimusmoriarty
 
Fecha de Ingreso: octubre-2012
Mensajes: 24
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Problema para conectar con clase BD en visual Basic

Hola de nuevo,

a ver he depurado tal como me dijiste, puse dos puntos de depuracion, que te los marco en negrita:


Código:
Imports System.Data
Imports System.Data.OleDb
Imports System.Windows.Forms.DataGridView
Imports Muebles_DAW.BaseDatos



Public Class FormCat
    Public Shared mibase As New BaseDatos("muebles.accdb")

    Private Sub ButtonVerCategorias_Click(sender As Object, e As EventArgs) Handles ButtonVerCategorias.Click
        'Dim mibase As New BaseDatos
        Dim mibase As BaseDatos = New BaseDatos()
        Dim listaCat As New ArrayList







        Try
            BaseDatos.abrirBase()

            listaCat = BaseDatos.listarCategorias(mibase)

            For i As Integer = 0 To listaCat.Count
                ListBoxCategorias.Items.Add(listaCat(i))

            Next

            BaseDatos.cerrarBase()


        Catch ex As OleDbException

        End Try

    End Sub
End Class
vale el otro punto de interrupcion lo puse en la clase BaseDatos, donde esta el metodo/funcion

Código:
Imports System.Data.OleDb
Imports System.Collections.ArrayList


Public Class BaseDatos

    'Dim conexion As OleDbConnection
    Private Shared conexion As OleDbConnection
    Private Shared comado As OleDbCommand
    Private Shared cadenaConexion As String


    Public Sub New(ByVal BaseDatos As String)
        Dim cadenaConexion As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\muebles.accdb"
        ' cadenaConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\mario\Documents\Visual Studio 2012\Projects\Muebles_DAW\Muebles_DAW\muebles.accdb"
        conexion = New OleDbConnection(cadenaConexion)

    End Sub
    Public Sub New()

    End Sub

    Public Shared Function abrirBase() As Boolean

        Try
            conexion.Open()


        Catch ex As Exception

        End Try
        Return False
    End Function

    Public Shared Function cerrarBase() As Boolean

        Try
            conexion.Close()
            Return True




        Catch ex As OleDbException
            Return False



        End Try
    End Function


    Public Shared Function listarCategorias(ByVal mibase As BaseDatos) As ArrayList
        Dim cat As New ArrayList()
        Dim cadena As String = "SELECT codigo,nombre_categoria FROM categorias"
        Try
            'conexion.Open()
            comado = New OleDbCommand(cadena, conexion)
            Dim registros As OleDbDataReader = comado.ExecuteReader
            While (registros.Read())

                cat.Add(registros.GetInt16("codigo"))
                cat.Add(registros.GetString("nombre_categoria"))


            End While
            Return cat
            'conexion.Close()


        Catch ex As Exception

        End Try


    End Function



End Class
vale cuando voy dando saltos llega hasta la parte de código que está en rojo, pero, no entra en el while, directamente se va a la excepcion con el mensaje:

"InvalidOperationException was caught"
Execute Reader requiere una conexion abierta y disponible,el estado de la
conexion es cerrada

No se si se me escapa algún pequeño detalle..
Saludos y gracias