none
problema sqldatareacer... RRS feed

  • Pregunta

  • Hola siempre he usado el SQLDataReader y m ha funcionado bien pero ahora mi problema es necisto recorrer una tabla de 3 millones de registros para hacer unos calculos, depues con estos 3 millones de reg armo un archivo csv para despues hacer un buk insert y ya tener la tabla de resumenes q necesito, todo el proceso corre bien, el problema es cuando termino de ejecutar y reviso mi archivo solo tiene poco mas de 11k registros.. :S y deberian ser 3 millones, es como si el data reader no leyera todos los registros, alguien sabe por q podria ocurrir esto??
    de antemano gracias y saludos.
    jueves, 22 de octubre de 2009 16:28

Respuestas

  • Hola..

    Pudieras darnos más pistas para poder ver qué te está pasando?? (algo de código de la parte donde escribes en el archivo)

    ¿¿Has cerrado el archivo al terminar el proceso?? Recuerda que Windows usa Cache de escritura contra el disco... si no haces un close.. puede que aún existan datos en memoria..

    Salu2

    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise 3.5.

    Mi perfil: www.odelvalle.com
    Colaborador: www.secondnug.com
    jueves, 22 de octubre de 2009 20:06
    Moderador
  • No se si has probado con el timeout de la conexión. Es probable que debido a la cantidad de filas lleve un poco mas de tiempo el proceso y si la conexion tiene un timeout corto no se llega a procesar todas las filas. Para que el el timeout no funcione directamente puedes poner 0 y el proceso se ejecuta hasta finalizarlo sin importar el tiempo. 
    El timeout se pone en el SqlCommand que ejecuta al SqlReader en la propiedad CommandTimeOut.

    Saludos

    Sparow
    viernes, 23 de octubre de 2009 14:12

Todas las respuestas

  • hola

    Podria deberse no al datareader en si, sino a que la logica de la aplicacion esta produciendo este resultado.

    O sea si el query a la db reduce el conjunto de datos devuelto, o si alguna condicion en el ciclo que usas para iterar y calcular tiene algun fallo en el proceso que hace que se corte antes, podria estar causando lo que mencionas

    Lo que te aconsejaria es que agregues registros de log para poder tracear la aplicacion y determinar por que camino esta pasando.


    Podrias utilizar agun sistema de log, por ahi a un archivo de texto que en ciertas lineas de tu aplicacion agreges por donde pasa.

    Podrias usar algo como esto:
    Overriding System.Diagnostics.Trace.WriteLine to log to a file

    TextWriterTraceListener

    o si te animas usar el Log4Net.


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 22 de octubre de 2009 16:39
  • Hola..

    Pudieras darnos más pistas para poder ver qué te está pasando?? (algo de código de la parte donde escribes en el archivo)

    ¿¿Has cerrado el archivo al terminar el proceso?? Recuerda que Windows usa Cache de escritura contra el disco... si no haces un close.. puede que aún existan datos en memoria..

    Salu2

    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise 3.5.

    Mi perfil: www.odelvalle.com
    Colaborador: www.secondnug.com
    jueves, 22 de octubre de 2009 20:06
    Moderador
  • No se si has probado con el timeout de la conexión. Es probable que debido a la cantidad de filas lleve un poco mas de tiempo el proceso y si la conexion tiene un timeout corto no se llega a procesar todas las filas. Para que el el timeout no funcione directamente puedes poner 0 y el proceso se ejecuta hasta finalizarlo sin importar el tiempo. 
    El timeout se pone en el SqlCommand que ejecuta al SqlReader en la propiedad CommandTimeOut.

    Saludos

    Sparow
    viernes, 23 de octubre de 2009 14:12
  • Hola

    puedes usar el siguiente codigo para verificar el commando que envias a la base te esta devolviendo los registros que necesitas

            Dim table As New DataTable("Table")
            Using odbcconn As New OdbcConnection(strCNN)
    
                odbcconn.Open 
                Dim OdbcCmd As New OdbcCommand(Sql1, odbcconn)
    
                Using Reader As odbcDataReader = OdbcCmd.ExecuteReader(CommandBehavior.CloseConnection)
    
                    IF Reader.HasRecords then
                        
                        table.Load(Reader)
    
                      Debug.print(table.Rows.Count)
    
                      'Esto te dira cuantos registros se cargaron en la tabla
                      'Luego pasas estos a la rutina que genera el csv
    
                    END IF
    
                End Using
    
            End Using
    

    Programador en VB.NET 2008, SQL SERVER 2008, Crystal Report 2008 Si la respuesta es correcta, marcála como correcta. También puedes votar como útil si te sirvió.
    lunes, 2 de noviembre de 2009 4:18