Visual Basic.NET - Problema con una CLASE

 
Vista:
Imágen de perfil de Guillermo
Val: 64
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con una CLASE

Publicado por Guillermo (40 intervenciones) el 24/05/2021 01:44:41
Jóvenes por favor, necesito su ayuda otra vez.
Es un problema con una clase, em dice lo siguiente:
'Intento no válido de llamar a Read cuando el lector está cerrado.'

les voy a poner el código del método de la clase:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Public Function MostrarTodos() As OleDbDataReader
        Dim conectar As New Coneccion
        conectar.conectar()
        Try
            Dim sql = "select * from productos, marcas, categorias, cantidades, precios
                    where
                    productos.cod_marca = marcas.cod_marca
                    and
                    productos.cod_categoria = categorias.cod_categoria
                    and
                    cantidades.cod_producto = productos.cod_producto
                    and
                    productos.cod_producto = precios.cod_producto;"
            Dim cmd As New OleDbCommand(sql, conectar.con)
            Dim datos As OleDbDataReader
 
            datos = cmd.ExecuteReader
            If datos.Read Then
                Me.Codigo = datos.Item("productos.cod_producto")
                Me.Nombre = datos.Item("productos.nombre")
                Me.Marca = datos.Item("marcas.nombre")
                Me.Categoria = datos.Item("categorias.nombre")
                Me.Cantidad = datos.Item("cantidad")
                Me.Precio = datos.Item("precio")
                conectar.desconectar()
                Return datos
            Else
                MsgBox("El inventario está vacío.")
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        conectar.desconectar()
    End Function

Ahora les voy poner el código del formulario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub frmMostrarTodos_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Dim Prod As New Productos
 
        Dim rs As OleDb.OleDbDataReader
        rs = Prod.MostrarTodos
 
        While rs.Read  '---> ERROR
                Rejilla.Rows.Add(
                    rs.Item("Codigo"),
                    rs.Item("Nombre"),
                    rs.Item("Marca"),
                    rs.Item("Categoria"),
                    rs.Item("Cantidad"),
                    rs.Item("Precio")
                )
            End While
 
    End Sub

Alguien de buen corazón que me ayude por favor
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con una CLASE

Publicado por Phil Rob (1546 intervenciones) el 24/05/2021 08:13:25
Hola,

Cuando ejecute If datos.Read Then ... , ejecutes ya la lectura del primero registro.
Cuando datos contiene un solo registro, tienes error con While rs.Read por que no mas registros.

No es tu pregunta, solamente mi idea, si trabajo con OleDataAdapter, este es mucho mas facile. Entonces, tienes un DataTable qui existe en todo lugar del programa, si lo quieres. El DataTable puede ser leido a menudo. No es el caso de los registros del DataReader.

Que tenga un buen dia ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Guillermo
Val: 64
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con una CLASE

Publicado por Guillermo (40 intervenciones) el 24/05/2021 08:21:16
Hola amigo.
Tiene mucho sentido lo que dices.
Pero lo voy a ver mañana.
Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con una CLASE

Publicado por Phil Rob (1546 intervenciones) el 24/05/2021 08:43:19
Leyendo nuevamente tus códigos, veo ejemplos de DataReader no cerrados. Cuando pasas de este procedimientos a un procedimiento con UPDATE, es normal que no funciona (tu pregunta de ayer).
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Guillermo
Val: 64
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con una CLASE

Publicado por Guillermo (40 intervenciones) el 25/05/2021 21:08:46
hola.
a qué te refieres con DataReader no cerrados?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con una CLASE

Publicado por Phil Rob (1546 intervenciones) el 26/05/2021 11:01:23
Hola,

Cuando es terminado la lectura de los datos del DataReader, debe existir la instrucción Close. Mira mi ejemplo :

1
2
3
4
5
6
7
8
9
' ... ... ...
    Dim MesPersonnes As OleDbDataReader
    MaCommande.CommandText = "SELECT * FROM TPers"
    MesPersonnes = MaCommande.ExecuteReader()
    Do While MesPersonnes.Read                                          ' Aqui, leemos todos registros del DataReader llamado MesPersonnes
       Console.WriteLine(MesPersonnes.Item(0) & " " & MesPersonnes.Item(1))
    Loop
    MesPersonnes.Close()                                          ' Aqui, cerramos el DataReader llamado MesPersonnes. Eset es necesario ante hacer  ExecuteNonQuery, ExecuteScalar o nuevo ExecuteReader.
' ... ... ...

En tu codigo, no he visto datos.Close() ni rs.Close(). Si nunca hecho, entonces normal que existe problema con UPDATE que es ejecutar con ExecuteNonQuery.

Espero que he explicado bien ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar