1

我有一个存储过程,它返回一定数量的行。

案例 1:当我使用 SqlDataAdapter

SqlDataAdapter sdAdapter = new SqlDataAdapter();
ds = new DataSet();
sdAdapter.SelectCommand = myCommand;
sdAdapter.Fill(ds);
int recordCount = ds.Tables[0].Rows.Count;

案例 2:当我使用 SqlDataReader

SqlDataReader reader = myCommand.ExecuteReader();
if (reader.HasRows)
{
   while (reader.Read())
    {
     recordCount++;
    }
 }

在案例 1 中,recordCount 为 15,这是正确的。

在案例 2 中,由于某种原因,reader.HasRows 返回 false。

我在语法方面做错了吗?我确信 myCommand 已经正确构建,因为我确实得到了案例 1 中的计数。

任何帮助将非常感激。

谢谢

4

2 回答 2

1

1.DataReader 工作在连接的环境中,而DataSet 工作在断开的环境中。2.DataSet 表示由任意数量的相互关联的DataTable 对象组成的内存中数据缓存。DataTable 对象表示内存中数据的表格块。

更多详细信息,请访问sqldataadapter 或 sqldatareader

于 2013-03-15T16:36:55.303 回答
0

if (reader.HasRows)是多余的。当你说while (reader.Read())时,它只会在有任何行时循环。此外,此链接将解释 HasRows 需要可滚动光标。在此处阅读有关游标的信息。

于 2013-02-16T03:08:01.013 回答