请问如何获得SqlDataReader的记录数!

请问如何获得SqlDataReader的记录数!,第1张

Provides a way of reading a forward-only stream of rows from a SQL Server database This class cannot be inherited

SqlDataReader是单向数据集,时间过去了,没办法返回!

The number of rows changed, inserted, or deleted; 0 if no rows were affected or the statement failed; and -1 for SELECT statements

public override int RecordsAffected <----用这个属于性试下,可以取出记录数!

�衷诘奈侍饩凸榻嵩谡饷窗鸦袢∽芗锹挤祷氐酱娲⒐�痰氖涑霾问�小O衷诩虻ヌ�隹突П斫峁梗�接着贴出我的存储过程:Create proc [dbo][Get_Customer]@type varchar(1000),@pageIndex int,@pageSize int,@RecordCount int outputasdeclare @beginIndex intdeclare @endIndex intdeclare @sql Nvarchar(max)注意这里定义的是Unicode变量set @beginIndex=(@pageIndex-1)@pageSize+1set @endIndex=@pageIndex@pageSizeset @sql=' IF OBJECT_ID(''tempdb#temp'') IS NOT NULLDROP TABLE #tempselect ROW_NUMBER() over (order by cId) as id,CustomNO,Name,Phone,Email,Type into #temp from Customer 'if(@type is not null)set @sql=@sql+'where type='''+@type+''set @sql=@sql+' select @p=COUNT() from #tempselect from #temp where #temprowNum between ' + cast(@beginIndex as varchar(10))+' and '+ cast(@endIndex as varchar(10))--使用EXECUTE直接执行获取不到总记录数 --EXECUTE (@sql) --使用EXECUTE执行sp_executesql存储过程才能获取到EXECUTE sp_executesql @sql,N'@p AS INT OUTPUT',@p=@RecordCount Output其实以上两种执行的方式差别就是:一种是执行一个动态的批处理,另一种是执行一个存储过程sp_executesql命令,因为它提供一个接口,该接口及支持输入参数也支持输出参数。这功能使你可以创建带参数的查询字符串,这样就可以比EXEC更好的重用执行计划,sp_executesql的构成与存储过程非常相似,不同之处在于你是动态构建代码。通过上面的列子的话可以看见直接执行批处理时获取不到动态语句里面的总记录数的。 构造动态sql的where子句,也就是条件子句时,exec无法使用变量来进行占位,需要将变量转换成字符串,然后和动态sql进行拼接,这就可能引起Sql注入问题,而通过sp_executesql就不会有这个问题 比如上面的存储过程可以按一下方式修改执行修改一:set @sql=@sql+'where type='''+@type+''改为:set @sql=@sql+'where type=@typ'修改二 --使用EXECUTE执行sp_executesql存储过程才能获取到EXECUTE sp_executesql @sql,N'@p AS INT OUTPUT',@p=@RecordCount Output改为 --使用EXECUTE执行sp_executesql存储过程才能获取到EXECUTE sp_executesql @sql,N'@typ Nvarchar(50),@p AS INT OUTPUT',@typ=@type @p=@RecordCount Output至于sp_executesql更详细的语法及使用方式请参考其它资料,或者直接打开数据库然后按F1寻求帮助 嘿嘿!!,本站保留追究责任的权利。

可以通过count函数来实现。

sqlOne:select from tablename1 where id>5;此语句查询出来多条记录,之后看做一个新的表。

sqlTwo:select conut() from (select from tablename1 where id>5) as tablename2;此语句即可查询出来统计的记录条数。

备注:以上方法通用于所有的数据统计,如果是单表查询,可以直接通过:“select count( ) from tablename1 where id>5"的形式查询出结果。

说一下几种思路:

一、如果你的表名是有规律的,就用循环组合成sql,再执行。如:

declare @i int,@sql varchar(1000)

set @i=1

while @i<10

begin

set @sql='select count() from table'+convert(varchar,@i)

exec @sql

end

二、把表名从系统表里取出,来组成sql

select ''select count() from '+name from sysobjects where xtype='u'

再把sql取出来执行既可。

三、如果你有兴趣研究,还可以使用微软未公开的存储过程来处理 sp_MSforeachtable。这个就不详写了。

SQL分页查询总记录数和查询信息临时表

创建临时表

方法一:

create

table

#临时表名(字段1

约束条件,

字段2

约束条件,

)

create

table

##临时表名(字段1

约束条件,

字段2

约束条件,

)

方法二:

select

into

#临时表名

from

你的表;

select

into

##临时表名

from

你的表;

注:以上的#代表局部临时表,##代表全局临时表

查询临时表

select

from

#临时表名;

select

from

##临时表名;

删除临时表

drop

table

#临时表名;

drop

table

##临时表名;

以上就是关于请问如何获得SqlDataReader的记录数!全部的内容,包括:请问如何获得SqlDataReader的记录数!、如何通过执行动态sql获取分页需要的总记录数、sql语句怎样获得查询计数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9555319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存