执行Sql时,什么方法可以同时返回受影响的行数和记录集

游北亮
博客专家认证
2010-09-19 11:56:18
因为做一个简单的执行sql的功能,但是要怎么判断用户的sql类型呢?
比如这个sql是检索数据还是更新或删除?

简单的判断是否以指定关键字开头肯定不行的

所以我就想变通一下,有没有什么方法可以同时返回受影响的行数和记录集
这样的话,我判断有记录集,就是属于检索数据,就绑定一个GridView,没有记录集,就告诉用户影响了多少行

不要告诉我执行2遍sql哦……
...全文
1738 25 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
有没人帮助回答一下呢?
游北亮 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)

111,086

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧