我试图在数据阅读器中显示记录数。这是我尝试过的。
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的记录数时。
答案 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
}