如何获取数据读取器中的记录数?

时间:2014-06-29 16:49:10

标签: c# record datareader

我试图在数据阅读器中显示记录数。这是我尝试过的。

if (mybtnreader1.HasRows)
{
   using (DataTable dt = new DataTable())
   {
       dt.Load(mybtnreader1);
       int rc = dt.Rows.Count;
       MessageBox.Show("Have "+rc+"records");
   }
} 

虽然它有记录,但它总是显示0.如何更正或者是否有其他方法来获取数据读取器中的记录数?

我使用此代码显示数据。

while(mybtnreader1.Read())
{
    MessageBox.Show(mybtnreader1.GetValue(0) + "  "+mybtnreader1.GetValue(1)+" ");
}

它显示的是数据,但是当它显示的是0的记录数时。

3 个答案:

答案 0 :(得分:2)

循环查询结果后,您可以使用 RecordsAffected

mybtnreader1 = command.ExecuteReader();

 while(mybtnreader1.Read())
        {

          ///do your stuff
        }

mybtnreader1 .Close();
MessageBox.Show(mybtnreader1 .RecordsAffected.ToString());

答案 1 :(得分:1)

DataReader是只读的只读文件,因此您无法在循环读取所有记录之前获取记录数。当你循环时,你可以数数,但不是之前。

如果您需要提前知道记录数并希望获得DataReader的性能和内存优势,那么请更改您的查询以运行两个查询..首先使用select count(*)...进行相同的基础查询然后实际的查询。根据查询,这显然会影响性能。由于缓存,它不会是时间的两倍,但是需要额外的处理时间。您必须权衡提前计算的需要与使用DataReader与DataTable的优势。

例如,如果您要查询表格中的每条记录:

string sql = "SELECT * FROM MyTable";
using(var dataReader = ...)

然后你可以这样做:

string sql = @"
                SELECT COUNT(*) FROM MyTable;
                SELECT * FROM MyTable;
             };
using(var dataReader = ...)
{
    ... process first result in data reader (count) ...
    if (dataReader.NextResult) 
    {
       ... process the second result (records) ...
    }
}               

答案 2 :(得分:0)

您不能直接使用Datareader进行操作。您可以像下面这样-

SqlDataReader reader = command.ExecuteReader();
DataTable dt_results = new DataTable();
dt_results.Load(reader);
int count= dt_results.Rows.Count;
if(count>0)
{
    //Hey! we Have records for this query
}
else{
    //Sorry! No Records Exist for this query
}