因为做一个简单的执行sql的功能,但是要怎么判断用户的sql类型呢?
比如这个sql是检索数据还是更新或删除?简单的判断是否以指定关键字开头肯定不行的所以我就想变通一下,有没有什么方法可以同时返回受影响的行数和记录集
这样的话,我判断有记录集,就是属于检索数据,就绑定一个GridView,没有记录集,就告诉用户影响了多少行不要告诉我执行2遍sql哦……
比如这个sql是检索数据还是更新或删除?简单的判断是否以指定关键字开头肯定不行的所以我就想变通一下,有没有什么方法可以同时返回受影响的行数和记录集
这样的话,我判断有记录集,就是属于检索数据,就绑定一个GridView,没有记录集,就告诉用户影响了多少行不要告诉我执行2遍sql哦……
解决方案 »
- 企信通发送短信上行问题 FullTunnelControl.dll
- C#和VC++做RAD开发的比较请教
- 小弟想学C# 该看什么书或者视频?
- 急,自定义datatable多行多列问题??
- 求Wrox Beginning Visual C Sharp 2005中文版
- webForm中。比如金额计算时。输入数量和单价。要能焦点离开单价TextBox自动计算出金额,怎么写?
- 问大师一个简单的问题啊
- 网页难题,动态生成N个TEXTBOX后怎么取出TEXT值 开发环境(WIN2003+VS2005+Sql2005)
- 听说J#很难,不如学C#,哪位给小弟指点一下
- 怎样在C#里截取首尾空格?
- C# winform 类似comboBox只让用户选择该怎么弄
- C# 关于库的引用
如果是Select,ExecuteQuray()返回的结果集里面可以用Count获取影响的行数
如果是其他,可以用ExecuteNonQuray()函数返回的就是影响的行数
但是你怎么区分是Select还是不是呢?
有些语句并不以Seelct开头,也能返回数据集
比如:
with t1 as(select * from aaa)select * from t1
它只针对update insert 及delete语句 返回影响行数你可以从这一点上下手试试
使用 ExecuteDataSet,如果是select则返回结果集和总行数,如果不是则只有受影响行数,那么DataSet中就有两个表或者一个表,根据表个数判断是否是要绑定还是显示受影响行数
就是用out参数和select
@@ROWCOUNT
返回受上一语句影响的行数。
语法
@@ROWCOUNT
ExecuteNonQuery is only for "delete / update / insert
就会返回一个表,就得到行数了 。
sql += "\r\n;set @abc = @@ROWCOUNT";
再调用DataSet.Fill
回头测试一下还要看看Oracle有没有类似的东东
既然如此,那你又是在什么地方判断“当为SELECT 的时候需要返回结果集,但如果是其他的则不返回”呢?
用户输入sql,而程序自动判断sql会不会返回记录集,会的话,绑定到GridView,不会的话,返回影响的行数到目前为止,我所知道的方法就是
1、自己写一个Sql解释器,分析出执行的sql,自然也就知道会不会返回记录集了;
2、在SqlServer里,加一条语句,返回@@rowcount的值(不适用于其它数据库)