Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/12/2013, 17:08
serenimusmoriarty
 
Fecha de Ingreso: octubre-2012
Mensajes: 24
Antigüedad: 11 años, 7 meses
Puntos: 0
Problema para conectar con clase BD en visual Basic

Saludos a todos la comunidad,
bueno el caso es que he retomado un antiguo ejercicio que tenía de VB, y me estoy encontrando problemas.

De momento es muy sencillo, he declarado una clase BaseDatos.vb y ademas
tengo una funcion(listarCategorias) que tiene que retornar un arrayList

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)
        'cadenaConexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|" + BaseDatos + ";Persist Security info=True"
        cadenaConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\muebles.accdb"
        conexion = New OleDbConnection(cadenaConexion)

    End Sub
    Public Sub New()

    End Sub

    Public Shared Function abrirBase() As Boolean

        Try
            If (conexion.State = System.Data.ConnectionState.Open) Then
                Return True
                conexion.Open()
                Return True



            End If

        Catch ex As OleDbException
            Return False

        End Try
    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*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


        Catch ex As Exception

        End Try


    End Function


End Class

En mi clase FormCat.vb, invoco el metodo en un evento de boton (ButtonVerCategorias_Click)

El objetivo como podreis ver es agregar los datos del arrayList a un listBox
(ListBoxCategorias)

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 listaCat As New ArrayList


        Try
            BaseDatos.abrirBase()
            listaCat = BaseDatos.listarCategorias(mibase)
           


  22      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
Aqui viene el error, al ejecutar me aparece una ventana de error en la linea 22:
del tipo null Reference Exception: señalado en rojo

System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
en Muebles_DAW.FormCat.ButtonVerCategorias_Click(Obje ct sender, EventArgs e) en C:\Users\mario\Documents\Visual Studio 2012\Projects\Muebles_DAW\Muebles_DAW\FormCat.vb:l ínea 22

La verdad, no se que se me está escapando, no se si es el texto de la cadena de conexion... la base de datos la tengo activada en el "Server Explorer" y tambien la tengo en el "Serch Solution explorer" junto con los demás formularios y clases.
El visual estudio es el 2012 y el archivo de Acces es del tipo accdb

Agradeceré cualquier tipo de ayuda.
Muchas gracias por anticipado