Saltar al contenido

Cómo obtener el número de filas usando SqlDataReader en C#

Luego de mucho batallar pudimos hallar el arreglo de este enigma que muchos los lectores de esta web presentan. Si tienes algo que compartir puedes dejar tu información.

Solución:

Solo hay dos opciones:

  • Descúbrelo leyendo todas las filas (y luego también podrías almacenarlas)

  • ejecutar un SELECT COUNT especializado

consulta de antemano.

Pasar dos veces por el bucle DataReader es realmente costoso, tendría que volver a ejecutar la consulta.

Y (gracias a Pete OHanlon) la segunda opción solo es segura para la concurrencia cuando usa una transacción con un nivel de aislamiento de instantánea.List<> Dado que desea terminar almacenando todas las filas en la memoria de todos modos, la única opción sensata es leer todas las filas en un almacenamiento flexible ( DataTableo

) y luego copie los datos a cualquier formato que desee. La operación en memoria siempre será mucho más eficiente.

using (var sqlCon = new SqlConnection("Server=127.0.0.1;Database=MyDb;User Id=Me;Password=glop;"))
      
        sqlCon.Open();

        var com = sqlCon.CreateCommand();
        com.CommandText = "select * from BigTable";
        using (var reader = com.ExecuteReader())
        
            //here you retrieve what you need
        

        com.CommandText = "select @@ROWCOUNT";
        var totalRow = com.ExecuteScalar();

        sqlCon.Close();
      

Si no necesita recuperar toda la fila y quiere evitar hacer una consulta doble, probablemente pueda intentar algo así:

Es posible que deba agregar una transacción, no está seguro si reutilizar el mismo comando agregará automáticamente una transacción en él …

Según lo anterior, un conjunto de datos o un conjunto de datos escrito podría ser una buena estructura temporal que podría usar para filtrar. Un SqlDataReader está destinado a leer los datos muy rápidamente. Mientras está en el ciclo while(), todavía está conectado a la base de datos y está esperando que haga lo que esté haciendo para leer/procesar el siguiente resultado antes de que continúe. En este caso, puede obtener un mejor rendimiento si extrae todos los datos, cierra la conexión a la base de datos y procesa los resultados “fuera de línea”.

La gente parece odiar los conjuntos de datos, por lo que lo anterior también podría hacerse con una colección de objetos fuertemente tipados.

Si estás contento con lo expuesto, tienes la habilidad dejar un enunciado acerca de qué le añadirías a este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *