2013-02-16 25 views
1

我有一个存储过程返回一定数量的行。SqlDataAdapter和SqlDataReader

情况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中,总记录为15,其是正确的。

在情况2中,出于某种原因,reader.HasRows返回false。

我在语法上做错了什么?我相信我的命令已经正确构建,因为我确实得到了第一种情况的计数。

任何帮助将非常感激。

谢谢

+0

可以或许表明你正在使用的SQL命令.. – MethodMan 2013-02-16 01:47:02

+1

不可能从您发布的代码... – 2013-02-16 01:47:49

+0

喜地说,如果我评论的reader.HasRows案例2 ,我仍然可以执行reader.Read()并获取recordCount的值。所以只是想知道是否有可能hasRows返回false,但仍然有读者指向查询的内容? – 2013-02-16 02:49:35

回答

0

if (reader.HasRows)是多余的。当你说while (reader.Read()),它只会有循环,如果有任何行。另外,this link将解释HasRows需要一个可滚动的游标。阅读关于游标here

+0

非常感谢你:) – 2013-02-16 03:24:26

1

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

更详细的去sqldataadapter or sqldatareader