No existe una propiedad RecordCount que indique cuántos registros se han recuperado cuando usa la clase OleDbDataReader o SqlDataReader en Visual C#

Seleccione idioma Seleccione idioma
Id. de artículo: 308352 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E308352
Para obtener una versión de este artículo para Microsoft Visual Basic .NET, vea 308050.

Este artículo hace referencia a los siguientes espacios de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Data
  • System.Data.SqlClient
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando usa la clase OleDbDataReader o SqlDataReader, no existe una propiedad RecordCount que indique cuántos registros se han recuperado.

Causa

El objeto DataReader o el origen de datos back-end no suelen saber cuántos registros se han recuperado hasta que el último registro se envía al cliente.

Incluso un conjunto de registros ActiveX Data Objects (ADO) devuelve -1 para la propiedad RecordCount cuando utiliza un cursor de sólo avance para recuperar los datos. DataReader exhibe un comportamiento similar porque utiliza un cursor de sólo avance para recuperar las filas y columnas.

Solución

Como solución alternativa para este problema, utilice uno de los métodos siguientes:
  • Cuente los registros a medida que atraviesa el lector.
  • Ejecute primero una consulta SELECT COUNT (*). Observe que esta consulta puede estar anticuada cuando termina de leer los datos.

Estado

Este comportamiento es una característica del diseño de la aplicación.

Más información

Pasos para reproducir este comportamiento

  1. Inicie Microsoft Visual Studio .NET.
  2. Cree una nueva aplicación para Windows en Visual C# .NET. De manera predeterminada se creará Form1.
  3. Asegúrese de que el proyecto contiene una referencia al espacio de nombres System.Data y, si no es así, agregue una.
  4. Agregue un botón Command a Form1 y cambie sus propiedades Name y Text a btnTest.
  5. Utilice la instrucción using de los espacios de nombres System y System.Data para que no se le pida que califique las declaraciones de esos espacios de nombres más adelante en el código.
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  6. Vuelva a la vista Formulario y haga doble clic en btnTest para agregar el controlador de eventos de clic. Agregue el código siguiente al controlador:
        String myConnString = 
        "User ID=sa;password=sa;Initial Catalog=pubs;Data Source=mySQLServer";
    
        String mySelectQuery  = "SELECT * FROM Authors";
        SqlConnection myConnection = new SqlConnection(myConnString);
        SqlCommand myCommand = new SqlCommand(mySelectQuery, myConnection);
        myConnection.Open();
    
        SqlDataReader myReader ;
        myReader = myCommand.ExecuteReader();
        int RecordCount = 0;
    
        try
        {
    	while (myReader.Read())
    	{
    	    RecordCount++;
    	}
    	if (RecordCount == 0)
                MessageBox.Show("No data returned");
    	else
    	    MessageBox.Show("Number of Records returned: " + RecordCount);
        }
        catch (Exception ex)
        {
    	MessageBox.Show(ex.ToString());
        }    
        finally
        {
    	myReader.Close();
    	myConnection.Close();
        }
    					
  7. Modifique la cadena de conexión (myConnString) de acuerdo con su entorno.
  8. Guarde el proyecto.
  9. En el menú Depurar, haga clic en Iniciar para ejecutar el proyecto.
  10. Haga clic en el botón. Observe que puede ver el recuento de registros.

Referencias

Para obtener más información al respecto, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
194973 ADO: Recordcount puede devolver -1

Propiedades

Id. de artículo: 308352 - Última revisión: martes, 22 de mayo de 2007 - Versión: 3.5
La información de este artículo se refiere a:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# 2005
Palabras clave: 
kbtshoot kbnofix kbprb kbsqlclient kbsystemdata KB308352

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com