CLR: .Net / Mono / Boo / Otros CLR => VB .NET => Mensaje iniciado por: denigrado en Lunes 12 de Julio de 2010, 22:11
Título: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: denigrado en Lunes 12 de Julio de 2010, 22:11
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!
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: gerloxxx en Martes 13 de Julio de 2010, 16:36
Yo creo que el error esta en otro lado, muestranos algo de tu codigo para ayudarte...
saludos
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: denigrado en Jueves 15 de Julio de 2010, 00:29
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!
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: gerloxxx en Jueves 15 de Julio de 2010, 02:51
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
If dr.HasRowsThen
'argumentos .....
EndIf
mejor pregunta si puedes leer del sqlDataReader:
Código: vb.net
If dr.Read()Then
MsgBox(dr.Item("nom_campo"))
EndIf
' o bien un ciclo
while dr.Read()Then
...
espero te sirva esta sugerencia saludos
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: denigrado en Jueves 15 de Julio de 2010, 16:45
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!
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: gerloxxx en Jueves 15 de Julio de 2010, 19:24
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
Dim sql AsString="select * from pruebas where codigo='"& txtCodigo.Text&"'"
Por lo que si tu query anterior no consigue ningun registro, nunca entrara al while y no llegaras a esta parte:
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
if myreader.Read()then
'codigo encontrado
else
MessageBox.Show("Datos Incorrectos")
endif
espero estar entendiendo
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: denigrado en Viernes 16 de Julio de 2010, 20:58
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!
Título: Re: HasRows no es miembro 'System.Data.SqlClient.SqlDataReader
Publicado por: gerloxxx en Sábado 17 de Julio de 2010, 02:01
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