Foros del Web » Programación para mayores de 30 ;) » .NET »

vb .net Duda: consulta a mysql

Estas en el tema de vb .net Duda: consulta a mysql en el foro de .NET en Foros del Web. Hola, empece hace poco con vb, y tengo una duda al momento de acceder a los datos extraidos de la base de datos mysql, yo ...
  #1 (permalink)  
Antiguo 23/11/2011, 11:42
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 3 meses
Puntos: 0
vb .net Duda: consulta a mysql

Hola, empece hace poco con vb, y tengo una duda al momento de acceder a los datos extraidos de la base de datos mysql, yo tengo esta funcion

Código:
    Public Function sql_seleccionar(ByVal consulta As String) As Object

        DBCon = New MySQLConnection(New MySQLConnectionString("localhost", "bd", "user", "pass", 3306).AsString)

        Try
            'Abrimos la conexión y comprobamos que no hay error
            DBCon.Open()
        Catch ex As MySQLException
            'Si hubiese error en la conexión mostramos el texto de la descripción
            MsgBox(ex.Message.ToString)
            bConexionExitosa = False
      End Try


        If bConexionExitosa Then

            Dim sql As MySQLCommand = New MySQLCommand(consulta, DBCon)
            sql.CommandType = CommandType.Text
            Dim dr As System.Data.IDataReader
            dr = sql.ExecuteReader()

            DBCon.Close()
            Return dr

        Else
            Return "Error de conexion con la BD"
        End If

    End Function
Bueno con esa funcion realizo las consultas de seleccionar registros, y devuelvo un IDataReader, luego cuento los registros (es un login)

Código:
       Dim comprobrar_usuario As IDataReader
        comprobrar_usuario = sql_seleccionar("SELECT id FROM Usuarios WHERE user='" & usuario & "' AND pass='" & contrasena & "'")

        Dim contador As Integer
        While comprobrar_usuario.Read()
            contador = contador + 1
        End While

       If contador > 0 Then
            While comprobrar_usuario.Read()
                MsgBox(comprobrar_usuario("id"))
            End While
        End If
El problema que tengo es el segundo while no se ejecuta, el primero que contiene el contador si se ejecuta, pero pareciera que mas de un while no funciona, nose que es, y ya probe en la parte del contador poner un MsgBox(comprobrar_usuario("id")) y me envia la alerta bien, asi que la consulta esta bien.
Espero que me puedan ayudar muchas gracias.
  #2 (permalink)  
Antiguo 24/11/2011, 10:27
 
Fecha de Ingreso: junio-2008
Mensajes: 61
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: vb .net Duda: consulta a mysql

Me parece que no esta entrando por que tu contador es 0, ya utilizaste breakpoints para saber que valor esta llegando?
  #3 (permalink)  
Antiguo 24/11/2011, 11:47
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: vb .net Duda: consulta a mysql

Hola DKain, ya probe poner un MsgBox dentro del if y funciona, asi que el contador es mas de 0, y puse un breakpoint y el valor es 1 .
Puse un breakpoint en el while y parece que se ejecuta, pero lo que esta dentro no se ejecuta

en esta parte

Código:
 If contador > 0 Then
            While comprobrar_usuario.Read()
                MsgBox(comprobrar_usuario("id"))
            End While
        End If
Me podrias explicar mas o menos lo que hace .Read(), por lo que veo aqui dice que mueve al siguiente registro, puede ser que este en un registro adelante? y como tengo un solo registro no se ejecute ese while? perdon si tiro cualquier idiotes se muy poco de vb, gracias.
  #4 (permalink)  
Antiguo 24/11/2011, 15:10
 
Fecha de Ingreso: junio-2008
Mensajes: 61
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: vb .net Duda: consulta a mysql

Al momento de realizar tu primer while lo unico que haces es asignar el numero de elementos a tu contador, al recorrer tu variable DataReader, se va sumando uno, pero al final, como ya lo recorriste, ya no llega a entrar nuevamente en el segundo while por que se queda en el ultimo registro, te recomiendo que solo uses un solo while y consumas los resultados de cada uno de lo registros en ese mismo while
  #5 (permalink)  
Antiguo 24/11/2011, 16:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: vb .net Duda: consulta a mysql

Hola gracias por responder, lo que me dices es que comprobar_usuario, al usar while se queda en el ultimo registro, no hay forma de volver al primer registro?
Hay alguna otra forma de contar los registros? gracias.

Última edición por Antc1993; 24/11/2011 a las 16:27
  #6 (permalink)  
Antiguo 24/11/2011, 17:43
 
Fecha de Ingreso: junio-2008
Mensajes: 61
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: vb .net Duda: consulta a mysql

Recomendación:

Intenta no usar Readers para consultas, te recomiendo las tablas ya que son mas faciles de usar atraves de DataAdapter, de todos modos, aqui hay un articulo con respecto a estos temas:

http://www.elguille.info/colabora/NE...Readers_SP.htm

Finalmente aqui esta un ejemplo sobre mi recomendación, te lo recomiendo mil veces, estudia toda esta parte, esta muy sencilla, saludos

http://msdn.microsoft.com/es-es/libr...(v=vs.80).aspx
  #7 (permalink)  
Antiguo 25/11/2011, 13:10
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: vb .net Duda: consulta a mysql

Hola DKain, estube probando con los ejemplos que pusiste pero no me funciona

Código:
Dim cn As New SqlConnection()
    Dim CustomersDataSet As New DataSet()
    Dim da As SqlDataAdapter
    Dim dr As DataRow
    Dim cmdBuilder As SqlCommandBuilder

Public Sub sql_seleccionar(ByVal consulta As String)
        cn.ConnectionString = "Server=localhost;Database=bd;UID=user;PWD=pass;"
        cn.Open()

        da = New SqlDataAdapter(consulta, cn)

        cmdBuilder = New SqlCommandBuilder(da)
        da.Fill(CustomersDataSet, "Customers")
        MsgBox(CustomersDataSet.Tables("Customers").Rows(0)(0))
        cn.Close()
    End Sub
No me funciona, se tranca el programa y no hace nada, puse un breakpoint en cn.open y llega hasta ahi, pero da = New SqlDataAdapter(consulta, cn), no hace nada, no llega hacia esa linea.

Etiquetas: mysql, net, sql, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:33.