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