Foros > C# (Sharp) ( Limpio y listo para usarse ): Algo curioso al debuguear un DataReader

  1. jesuscas

    Mensajes [3] - Enviado el Jueves 04 de Octubre de 2007 a las 23:50hs

    Me pueden ayudar a entender lo siguiente:

    Tengo una aplicaci?n de Consola con C#, utilizo una clase para para leer datos de ORACLE por medio de un DataReader (llamemosle "clsLee"), la cual es llamada por otra clase que recibe estos datos (llamemosle "clsPide"), es decir tengo:

    public class clsLee
    {
    ??? //omito el constructor
    ?? public OdbcDataReader Lee(strConsulta)
    ?? {
    ????? OdbcDataReader drDat2;

    ?????? try{
    ??? ??? ??? OdbcCommand cmm = new OdbcCommand(strConsulta,gconnAs400);
    ??? ??? ??? drDat2 = cmm.ExecuteReader();
    ??? ??? ??? flgExito=true;
    ??? ??? ??? return drDat2;
    ??? ??? }
    ??? ??? catch(Exception e){
    ??? ??? ??? flgExito = false;
    ??? ??? ??? strMsgErr = e.Message;
    ??? ??? ??? drDat2=null;
    ??? ??? ??? return drDat2;
    ??? ??? }
    ?? }

    Y LA OTRA CLASE:
    public class clsPide
    {
    ??? public void Pide
    ??? {
    ??? ??? clsLee oclsLee = new clsLee();??
    ??? ??? OdbcDataReader drDatos;
    ??? ??? strConsulta = AsignaConsulta();?
    ??? ??? drDatos = oclsLee.Lee(strConsulta);
    ??? ??? while(drDatos.Read())
    ??? ?? ? ?? Console.Writeln("Registro con formato: " + Daformato(drDatos);
    ??? }
    ??? Public String DaFormato(OdbcDataReader drDatos)
    ??? {
    ??? ?? //...aplico alg?n formato a los campos, armandolo en alguna cadena strCadena
    ??? ?? Return strCadena;
    ??? }
    }

    Mi pregunta es:

    Cuando corro la aplicaci?n sin ning?n punto de interrupci?n lo hace sin problemas, me trae la cantidad de registros que deben de ser. PERO cuando estoy debugueando y pongo un punto de rompimiento al momento de llamar a la funcion DaFormato y voy recorriendo paso por paso de manera lenta (esto lo hago intencionalmente: mi aplicaci?n contiene m?s c?lculos, da formato, aplica criterios, c?lculos REGISTRO a REGISTRO, etc.), me doy cuenta de que el DataReader se va saltando registros, es decir, pongo un punto de rompimiento en :
    Console.Writeln("Registro con formato: " + Daformato(drDatos);
    Me espero un poco y al entrar debugueando a la funcion DaFormato ya estoy parado en el registro 5, por decir algo, en vez de quedarme en el primer registro (como deber?a de ser). Es decir, al debuguear dentro del While(drDatos.Read()) el DataReader se va recorriendo Y SIN QUE HAYA DADO UNA VUELTA EN EL CICLO WHILE!!!

    Espero haberme explicado en esto, que de plano me ha llevado un sin fin de horas en tratar de entender este comportamiento. Pero insisto esto me pasa solo al debuguear.

    Nota: Aclaro, este problema me pasa sin que haya completado un ciclo, es decir aun NO HE LEIDO OTRO REGISTRO (drDatos.Read()) y el DataReader ya se recorrio ..

    Muchas gracias por sus comentarios.


responder

Para poder responder a este tema tenes que ingresar. Si no tenes una cuenta podes registrarse gratis..

publicidad

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API