none
Un recordset que no siempre lee RRS feed

  • Debate general

  • ¡Hola compañeros de código! Estoy teniendo un problema con un recordset. Básicamente el problema está en que nunca usé recordsets, no son de mi agrado, pero estoy programando una aplicación de huellas que viene con un ejemplo, y no consigo hacerlo con datatables.

     

    Así qeu este es el problema: cargo las huellas, pero al momento de leerlas, cuando hay una sola huella o a veces cuando sólo hay registradas dos, ocurre que el recordset no lee. Tengo el siguiente código:

     

    rs = _DB.getTemplates();
    while(rs.Read())
    {
    	//Realizo los pasos de comparación
    }

    Pongo un breakPoint y nunca entra por la parte comentada, sale del while directamente.

    He revisado en las propiedades del recordset y me dice que tiene "HasRows = true; FieldCount = 2". Entonces ¿no debería entrar?.

    Por las dudas pongo el código de la función que me devuelve el recordset:

        public MySqlDataReader getTemplates()
        {
    	MySqlDataReader rs;
        //Se insertan los datos para enrolar
        Acceso oDB = new Acceso(ControlDeAcceso.Clases.XML.LeerNodoXML("dbP", "s"),
        ControlDeAcceso.Clases.XML.LeerNodoXML("dbP", "u"), ControlDeAcceso.Clases.XML.LeerNodoXML("dbP", "p"));
        oDB.Conectar();
    
        oDB.CrearComando("SELECT id_persona,huella FROM bdb.huellas;", false);
        rs = oDB.EjecutarDataReader();
    
    	return rs;
    	}
    
    ¿Me podrían dar una ayudita?


    Gabriela
    jueves, 6 de enero de 2011 23:05

Todas las respuestas

  • prueba con este codigo , para ver el resultado  ,quisas el problema sea el querry

     

    if (reader.HasRows)
     while (reader.Read())
      Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0), reader.GetString(1));
    else
     Console.WriteLine("No rows returned.");
    
    reader.Close();
    
    

    Live like you'll die tomorrow, learn like you'll live forever. http://underframework.wordpress.com/
    jueves, 6 de enero de 2011 23:33
  • El query está bien. E incluso al inspeccionar veo que tengo dos registros en el datareader. :(
    Gabriela
    viernes, 7 de enero de 2011 21:55
  • hola

    un recorset ? pero si eso que se ve alli es un DataReader de ado.net, el recorset el nombre usado en ADO en VB6, lo que estas suando alli no es un recordset, recomiendo no lo llames de esta forma porque traera confusion, en la pregunta y a ti tambien cuando busques info sobre el tema

    no creo que el DataReader sea un objeto indicado para devolverse en la llamada de un metodo, recuerda que este objeto es conectado, por lo tanto no podras cerrar la conexion si es que quieres trabajarlo, esto causa mucho problemas por eso lo idea cuando necesitas devolver info, sera un datatable o dataset

    el datareader es ideal para accederse en el mismo metodo, recorrerse secuancialmente cargando o procesando otro objeto, y luego cerrarse, pero no soy muy partidario de devolcerlo como parametro como resultado de una query

     

    igualmente una consulta, esto sucede cuando estas depurando ? o cuando eejcutas la aplicacion tambien sucede ?

    lo pregunto porque el datareader puede que se comporte distinto mientras depuras, me ha sucedido que cuando estas depurando se puerde el cursor, por eso pruebalo ejecutar sin debug, en todo caso loguea la info por donde pasa en algun otro campo, o en un archivo de texto, para ver como se comporta

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 7 de enero de 2011 22:28
  • Bueno no debería causar problemas, veo que tienes especificada la base de datos en el select "bdb", se me ocurre que de repente tendria que revisar si tienes varias bases de datos y si esa de ahí tiene datos en la tabla especificada.
    Jackson Rosado Developer c#, VFP, PL/SQL DBA - Oracle 10g
    domingo, 9 de enero de 2011 2:50
  • Si trae datos, no se cuál es la locura del DataReader. En fin, voy a traer un union para que siempre me devuelva como mínimo dos registros.
    Gabriela
    martes, 11 de enero de 2011 1:39