• Miércoles 15 de Mayo de 2024, 05:37

Autor Tema:  HasRows no es miembro 'System.Data.SqlClient.SqlDataReader  (Leído 4702 veces)

denigrado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« en: Lunes 12 de Julio de 2010, 22:11 »
0
Hola, amigos.

HAce unos dias empece a elaborar una aplicacion en vb.net, pero al intentar utilizar el DataReader, me arroja el siguiente mensaje:
'HasRows'  no es miembro de 'System.Data.SqlClient.SqlDataReader'.

He intentado muchas pruebas (incluyendo CopyPaste de ejemplos completos que incluyan HasRows) y no consigo resolver el problema.

Como dato adicional, estoy importando
System.Data y System.Data.SqlClient.

Espero me puedan ayudar.

SAludos!

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #1 en: Martes 13 de Julio de 2010, 16:36 »
0
Yo creo que el error esta en otro lado, muestranos algo de tu codigo para ayudarte...


saludos

denigrado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #2 en: Jueves 15 de Julio de 2010, 00:29 »
0
Hola gerloxx, gracias por contestar....
Aqui te paso el codigo para que lo veas y me des tu opinion:

***********************************************
 oConexion = New SqlConnection()
        oConexion.ConnectionString = ("cadena de conexion")

        Dim sql As String = "select * from pruebas where codigo='" & txtCodigo.Text & "'"
        Dim command As New SqlCommand(sql, oConexion)
        Try
            oConexion.Open()
            Dim dr As SqlDataReader = command.ExecuteReader()

            If dr.HasRows Then
                   'argumentos .....
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            oConexion.Close()
        End Try
****************************************************
Como dato adicional, la cadena de conexion funciona bien, porque la uso en otros formularios dentro de la misma aplicacion, y responde de manera correcta (insertando, actualizando, eliminando).
El "if" no tiene argumentos porque igual no haria nada, ya que es alli donde se presenta el problema, de que no reconoce a "HasRows" como miembro de "System.Data.SqlClient.SqlDataReader".

Estoy utilizando: MySql.Data.MySqlClient, el cual agregue como referencia (MySql.Data.dll), que lo extraje de "mysql-connector-net-1.0.10.1.exe"

Gracias por tu apoyo.
Saludos!

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #3 en: Jueves 15 de Julio de 2010, 02:51 »
0
Hola hice la prueba conectando tu codigo a sql server, lamentablemente no tengo mysql, y no me arroja ningun error (devuelve true o false según si obtiene o no el resultado), imagino que lo que intentas es preguntar si el la consulta arrojo algo antes de intentar trabajar con ese resultado, vdd?
Lo que podrias hacer en lugar de preguntar por:
Código: vb.net
  1.  
  2.             If dr.HasRows Then
  3.                 'argumentos .....
  4.             End If
  5.  
  6.  
mejor pregunta si puedes leer del sqlDataReader:
Código: vb.net
  1.  
  2.             If dr.Read() Then
  3.                 MsgBox(dr.Item("nom_campo"))
  4.             End If
  5.             ' o bien un ciclo
  6.             while dr.Read() Then
  7.             ...
  8.  
  9.  

espero te sirva esta sugerencia
saludos

denigrado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #4 en: Jueves 15 de Julio de 2010, 16:45 »
0
Hola gerloxxx

Tu sugerencia es bienvenida.
La verdad es que lo que deseo es que la aplicacion me recorra toda la tabla en busca de el parametro. Pero solo me valida la primera linea de la base de datos... si ingreso otro valor que no sea el primero de la tabla, no me lo valida.

Te paso el codigo para que lo revises.

            While myreader.Read()
            Try
                If Trim(myreader.Item("clave")) = txtPassword.Text Then
                    'realiza una accion
                End If

                If Trim(myreader.Item("clave")) <> txtPassword.Text Then
                   'realiza otra accion
                   MessageBox.Show("Datos Incorrectos")
                End If
 
             Catch ex As Exception
                LabelInfo.Text = "Error: " & ex.Message
            End Try
        End While

Saludos!

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #5 en: Jueves 15 de Julio de 2010, 19:24 »
0
Segun entiendo lo que intentas es validar un loggin o algo asi. Revisa en el analizador de consultas que arroja ese query.
El metodo Read cada vez que lo ejecutas, por decirlo asi te coloca en un renglon de la tabla que obtuviste del query, pero en tu query tu ya estas filtrando algunos renglones:

Código: vb.net
  1.  
  2. Dim sql As String = "select * from pruebas where codigo='" & txtCodigo.Text & "'"
  3.  
  4.  
Por lo que si tu query anterior no consigue ningun registro, nunca entrara al while y no llegaras a esta parte:

Código: vb.net
  1.  
  2.  If Trim(myreader.Item("clave")) <> txtPassword.Text Then
  3. 'realiza otra accion
  4. MessageBox.Show("Datos Incorrectos")
  5. End If
  6.  
  7.  
lo que puedes hacer es filtrar desde el query como lo tienes, y luego preguntar si encontro algo (si obtienes más de un registro y necesitas el while, activa una bandera para ver si entro a este):

Código: vb.net
  1.  
  2. if myreader.Read() then
  3. 'codigo encontrado
  4. else
  5. MessageBox.Show("Datos Incorrectos")
  6. endif
  7.  
  8.  
espero estar entendiendo

denigrado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #6 en: Viernes 16 de Julio de 2010, 20:58 »
0
Hola gerloxxx,

Te explico, el codigo si filtra desde el query, ya que hace la busqueda con referencia al valor que se ingresa.
Tambien entra al while, porque si ingreso el dato del primer regristro de la tabla de la DB, valida; pero si ingreso el segundo registro de la tabla o cualqueir otro que no sea el primero, tambien valida el else.... solo que no me valida el registro como existente en la DB.

Por ejemplo:
Si en la tabla es esta:
1-casa
2-techo
3-ventana

En el query envio como parametro "casa", la aplicacion entra al ciclo y hace ejecuta la funcion.
Pero si ingreso "techo" o "ventana", el sistema entra al ciclo, pero me arroja la accion "datos incorrectos".

Lo cual indica que, entra al "if" y tambien al "else", solo que no me esta recorriendo la tabla en la DB.

Espero haberme explicado bien.
Saludos!

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
« Respuesta #7 en: Sábado 17 de Julio de 2010, 02:01 »
0
Creo que estoy entendiendo poco... si recorres TODO el conjunto de resultados, al comparar cada registro incorrecto va a entrar al else, pero igual va a haber un momento en que entre a datos correctos, tal vez lo que necesitas es hacer la busqueda con el while y tomar acciones fuera de él, puedes romper el while cuando encuetres el registro...  o algo por el estilo.

Con tus datos de ejemplo, digamos que buscas "techo" y tienes los siguientes valores:

1-casa
2-techo
3-ventana

en el primer ciclo comparas casa = techo, y se va para el else del if...
en el segundo ciclo techo = techo, lo encuentra en el segundo ciclo, pero para este punto ya mostro el mensaje de datos incorrectos del primero ciclo...
y en el tercer ciclo ventanta = techo, y vuelve a mostrar el mensaje de datos incorrectos.

Puedes hacer algo como esto:

dim blnEncontrado as Boolean = false
while myReader.Read()
     if myReader.Item("campo") = DatoBuscado then
           blnEncontrado = true
           break
      End if
End While

if blnEncontrado Then
'...hacer algo
else
'...mensaje de error

Saludos