Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取数据读取器中的记录数?_C#_Record_Datareader - Fatal编程技术网

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

C# 如何获取数据读取器中的记录数?,c#,record,datareader,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。应该如何更正,或者是否有其他方法来获取数据读

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

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。

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

如果您需要提前知道记录的数量,并希望获得DataReader的性能和内存优势,请将查询更改为运行两个查询。。首先是使用
选择计数(*)…
的相同基础查询,然后是实际查询。根据查询的不同,这显然会影响性能。由于缓存的原因,这不会是时间的两倍,而是额外的处理时间。您必须权衡提前计数的必要性与使用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) ...
    }
}               

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


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

你确定数据表中存在记录吗?你能尝试显示记录吗?@KhushalDave我编辑了问题如果这是我的查询,SqlCommand mybtncmd02=new SqlCommand(“SELECT*FROM DirectNodes”,mybtnconn1);你能给我举个例子说明如何添加第二个查询吗?
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
}