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

Posted

技术标签:

【中文标题】如何获取数据阅读器中的记录数?【英文标题】:How to get the number of records in a Data Reader? 【发布时间】:2014-06-29 16:49:10 【问题描述】:

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

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。

【问题讨论】:

您确定数据表中存在记录吗? 您可以尝试显示记录吗? @KhushalDave 我编辑了问题 【参考方案1】:

遍历查询结果后,您可以使用 RecordsAffected

mybtnreader1 = command.ExecuteReader();

 while(mybtnreader1.Read())
        

          ///do your stuff
        

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

【讨论】:

【参考方案2】:

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) ...
    
               

【讨论】:

如果这是我的查询,SqlCommand mybtncmd02 = new SqlCommand("SELECT * FROM DirectNodes", mybtnconn1);你能告诉我一个如何添加第二个查询的例子吗?【参考方案3】:

您不能直接使用 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

【讨论】:

以上是关于如何获取数据阅读器中的记录数?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 mongodb 中的记录数

Alamofire - 如何获取表中的记录数

MSSQLSERVER中如何快速获取表的记录总数

如何在 php 中使用日期条件获取数据

在lucene中获取文档(doc)中的命中数

如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录