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

问题描述 投票:1回答:3

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

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。

c# record datareader
3个回答
2
投票

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

RecordsAffected

1
投票

DataReader是只读的,因此您无法在遍历所有记录之前获取记录数。当您遍历时,您可以数,但不能数。

如果您需要提前知道记录数,并希望获得DataReader的性能和内存优势,请更改查询以运行两个查询。首先使用mybtnreader1 = command.ExecuteReader(); while(mybtnreader1.Read()) { ///do your stuff } mybtnreader1 .Close(); MessageBox.Show(mybtnreader1 .RecordsAffected.ToString()); 进行相同的基础查询,然后进行实际查询。根据查询,这显然会影响性能。缓存不会使时间翻倍,而是额外的处理时间。您必须权衡需要提前进行计数的需求与使用DataReader与DataTable的优势的比较。

例如,如果您要从像这样的表中查询每条记录:

select count(*)...

然后您可以执行此操作:

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

0
投票

您不能直接使用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) ...
    }
}               
© www.soinside.com 2019 - 2024. All rights reserved.