社区
C#
帖子详情
执行Sql时,什么方法可以同时返回受影响的行数和记录集
游北亮
博客专家认证
2010-09-19 11:56:18
因为做一个简单的执行sql的功能,但是要怎么判断用户的sql类型呢?
比如这个sql是检索数据还是更新或删除?
简单的判断是否以指定关键字开头肯定不行的
所以我就想变通一下,有没有什么方法可以同时返回受影响的行数和记录集
这样的话,我判断有记录集,就是属于检索数据,就绑定一个GridView,没有记录集,就告诉用户影响了多少行
不要告诉我执行2遍sql哦……
...全文
1738
25
打赏
收藏
执行Sql时,什么方法可以同时返回受影响的行数和记录集
因为做一个简单的执行sql的功能,但是要怎么判断用户的sql类型呢? 比如这个sql是检索数据还是更新或删除? 简单的判断是否以指定关键字开头肯定不行的 所以我就想变通一下,有没有什么方法可以同时返回受影响的行数和记录集 这样的话,我判断有记录集,就是属于检索数据,就绑定一个GridView,没有记录集,就告诉用户影响了多少行 不要告诉我执行2遍sql哦……
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shelf0
2011-08-30
打赏
举报
回复
额。。。 我晕
zy7866zhou473
2011-07-01
打赏
举报
回复
看懂了,学习了
leiming1314
2011-07-01
打赏
举报
回复
@@ROWCOUNT 可以么
shaoliang520xi
2010-10-21
打赏
举报
回复
我也揍个热闹
游北亮
2010-10-21
打赏
举报
回复
没人知道?
那就散分,下周一结帖
游北亮
2010-09-20
打赏
举报
回复
你没看清楚我的话,现在sql是让用户输入,你怎么能确定这个sql是select还是update?
[Quote=引用 12 楼 battlerxange 的回复:]
update insert 及delete语句不是可以用ExecuteQuray得到返回的行数吗?
[/Quote]
BATTLERxANGE
2010-09-20
打赏
举报
回复
update insert 及delete语句不是可以用ExecuteQuray得到返回的行数吗?
游北亮
2010-09-20
打赏
举报
回复
汗,如果是Delete、Update之类,就不会有Table返回了,更不要说rows
[Quote=引用 10 楼 battlerxange 的回复:]
返回结果集以后直接查看Table.rows.length不就可以知道受影响的行数吗?
[/Quote]
BATTLERxANGE
2010-09-20
打赏
举报
回复
返回结果集以后直接查看Table.rows.length不就可以知道受影响的行数吗?
游北亮
2010-09-20
打赏
举报
回复
你这个仅针对SqlServer,不过可以考虑,比如
sql += "\r\n;set @abc = @@ROWCOUNT";
再调用DataSet.Fill
回头测试一下
还要看看Oracle有没有类似的东东
[Quote=引用 5 楼 holyplace 的回复:]
在你执行完sql的地方加select @@ROWCOUNT
使用 ExecuteDataSet,如果是select则返回结果集和总行数,如果不是则只有受影响行数,那么DataSet中就有两个表或者一个表,根据表个数判断是否是要绑定还是显示受影响行数
[/Quote]
symbol_bc
2010-09-20
打赏
举报
回复
执行完语句后加一句select @@rowcount
就会返回一个表,就得到行数了 。
游北亮
2010-09-20
打赏
举报
回复
是,现在我也在考虑写一个sql解释器,但是这个不是一时半会能完成的
所以想投机取巧一下,问问有没有同时返回2者的办法
[Quote=引用 4 楼 q107770540 的回复:]
ExecuteQuray()对于 select语句是不返回影响行数的
它只针对update insert 及delete语句 返回影响行数
你可以从这一点上下手试试
[/Quote]
wuyq11
2010-09-20
打赏
举报
回复
返回受影响的行数和记录集
就是用out参数和select
@@ROWCOUNT
返回受上一语句影响的行数。
语法
@@ROWCOUNT
ExecuteNonQuery is only for "delete / update / insert
HolyPlace
2010-09-20
打赏
举报
回复
在你执行完sql的地方加select @@ROWCOUNT
使用 ExecuteDataSet,如果是select则返回结果集和总行数,如果不是则只有受影响行数,那么DataSet中就有两个表或者一个表,根据表个数判断是否是要绑定还是显示受影响行数
q107770540
2010-09-20
打赏
举报
回复
ExecuteQuray()对于 select语句是不返回影响行数的
它只针对update insert 及delete语句 返回影响行数
你可以从这一点上下手试试
游北亮
2010-09-20
打赏
举报
回复
有没人帮助回答一下呢?
yankunlin
2010-09-20
打赏
举报
回复
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=340521059&site=qq&menu=yes"><img border="0" src="http://wpa.qq.com/pa?p=2:340521059:43" alt="点击这里给我发消息" title="点击这里给我发消息"></a>
游北亮
2010-09-20
打赏
举报
回复
不是这样的,我还是再明确一下我的要求吧
用户输入sql,而程序自动判断sql会不会返回记录集,会的话,绑定到GridView,不会的话,返回影响的行数
到目前为止,我所知道的方法就是
1、自己写一个Sql解释器,分析出执行的sql,自然也就知道会不会返回记录集了;
2、在SqlServer里,加一条语句,返回@@rowcount的值(不适用于其它数据库)
[Quote=引用 17 楼 porschev 的回复:]
LZ是要把增、删、改、查完全都分出来?
那不太好弄。。。。。如果把增、删、改与查分开还是好分。。。
要不前台每个返回值都用int类型的变量去接收。。。外面加try..catch
比如说增、删、改,返回值一定是个int类型的。。。。这样肯定不会报错。。。
如果报错。。。表示返回类型肯定不对。。。。在catch中用你查出来的返回类型去接收。。。再绑定上去。。。
[/Quote]
哥子谭
2010-09-20
打赏
举报
回复
不能把,有返回记录集就是检索啊?
增删改查都有返回记录集,不能以这个来判断
porschev
2010-09-20
打赏
举报
回复
LZ是要把增、删、改、查完全都分出来?
那不太好弄。。。。。如果把增、删、改与查分开还是好分。。。
要不前台每个返回值都用int类型的变量去接收。。。外面加try..catch
比如说增、删、改,返回值一定是个int类型的。。。。这样肯定不会报错。。。
如果报错。。。表示返回类型肯定不对。。。。在catch中用你查出来的返回类型去接收。。。再绑定上去。。。
加载更多回复(5)
my
sql
受
影响
行数
_关于
受
影响
行数
的详细介绍
如何通过
SQL
聚合函数获得增删改的
受
影响
行数
?再做进一步动作前就能够计算出一个查询
返回
或者
影响
的
行数
通常都非常有用,希望分页显示结果或生成统计信息
时
,这种功能特别方便,那么获取
受
影响
行数
的功能是如何实现的呢?一、通过
SQL
聚合函数 COUNT统计下旬结果记录数COUNT
返回
一个查询或者部分查询的
行数
,通常和DINSTINCT一起使用。
SQL
的聚合函数COUNT 被多种数据库广泛支持!二、通过 P...
SQL
存储过程
返回
受
影响
的
行数
在很多
时
候,使用存储过程,不需要
返回
数据集, 但是经常想知道存储过程是否对数据库有
影响
; 这些,只需要将下列数据放在你需要统计的语句后面即可; select @@ROWCOUNT
SQL
限定
返回
行数
如上述处理过程所示,Oracle 会在取得某一
行数
据之后再为其编号,这是关键之处。运行正常的原因在于,Oracle 必须至少尝试一次读取,才能确定表里是否有记录。的函数,该函数会为结果集里的每一行指定一个行号(从 1 开始,逐渐增大)。这样的子句来指定查询结果的
行数
。比如一张很大的表,你只想
返回
10行简单看看。你想限定查询结果的
行数
。,希望只
返回
第 5 行。使用数据库的内置功能来控制
返回
的
行数
。和等式条件是不对的。的值来获得指定
行数
的结果集。
行数
据
时
,会发生如下的事情。行,这似乎与上述解释相矛盾。
SQL
查询结果限制
返回
行数
语法实现: select col_name from table_name limit i,n 1、limit子句可以背英语强制select语句
返回
指定
行数
。 2、limit后跟一个参数或两个参数: 如果只给定一个参数,那么表示
返回
的记录
行数
; 如果给定两个参数,第一个参数未查询结果的索引值(默认从0开始),第二个参数指定
返回
的
行数
。 3、limit子句中如果第二个参数为-1,即表示
返回
从某一个偏移量到
记录集
结束的所有行。 exp: 代码实现: select device_id from us
SQL
Server限制
返回
行数
production.products表有321行,因此,321的百分之一是分数值(3.21),
SQL
Server将其进到下一个整数,在这种情况下是4行记录。它们用于限制查询
返回
的
行数
。由于存储在表中的行的顺序是不可预测的,因此SELECTTOP语句始终与ORDERBY子句一起使用。③OFFSET子句是必需的,而FETCH子句是可选的。在此语法中,SELECT语句可以包含其他子句,如WHERE,JOIN,HAVING和GROUPBY。...
C#
111,086
社区成员
642,552
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章