因为做一个简单的执行sql的功能,但是要怎么判断用户的sql类型呢?
比如这个sql是检索数据还是更新或删除?简单的判断是否以指定关键字开头肯定不行的所以我就想变通一下,有没有什么方法可以同时返回受影响的行数和记录集
这样的话,我判断有记录集,就是属于检索数据,就绑定一个GridView,没有记录集,就告诉用户影响了多少行不要告诉我执行2遍sql哦……

解决方案 »

  1.   

    这个
    如果是Select,ExecuteQuray()返回的结果集里面可以用Count获取影响的行数
    如果是其他,可以用ExecuteNonQuray()函数返回的就是影响的行数
      

  2.   

    你也说了,是如果
    但是你怎么区分是Select还是不是呢?
    有些语句并不以Seelct开头,也能返回数据集
    比如:
    with t1 as(select * from aaa)select * from t1
      

  3.   

    ExecuteQuray()对于 select语句是不返回影响行数的
    它只针对update insert 及delete语句 返回影响行数你可以从这一点上下手试试
      

  4.   

    在你执行完sql的地方加select @@ROWCOUNT
    使用 ExecuteDataSet,如果是select则返回结果集和总行数,如果不是则只有受影响行数,那么DataSet中就有两个表或者一个表,根据表个数判断是否是要绑定还是显示受影响行数
      

  5.   

    返回受影响的行数和记录集
    就是用out参数和select
    @@ROWCOUNT 
    返回受上一语句影响的行数。 
    语法 
    @@ROWCOUNT 
    ExecuteNonQuery is only for "delete / update / insert
      

  6.   

    是,现在我也在考虑写一个sql解释器,但是这个不是一时半会能完成的所以想投机取巧一下,问问有没有同时返回2者的办法
      

  7.   

    执行完语句后加一句select @@rowcount
    就会返回一个表,就得到行数了 。
      

  8.   

    你这个仅针对SqlServer,不过可以考虑,比如
    sql += "\r\n;set @abc = @@ROWCOUNT";
    再调用DataSet.Fill
    回头测试一下还要看看Oracle有没有类似的东东
      

  9.   

    返回结果集以后直接查看Table.rows.length不就可以知道受影响的行数吗?
      

  10.   

    汗,如果是Delete、Update之类,就不会有Table返回了,更不要说rows
      

  11.   

    update insert 及delete语句不是可以用ExecuteQuray得到返回的行数吗?
      

  12.   

    你没看清楚我的话,现在sql是让用户输入,你怎么能确定这个sql是select还是update?
      

  13.   


    既然如此,那你又是在什么地方判断“当为SELECT 的时候需要返回结果集,但如果是其他的则不返回”呢?
      

  14.   

    insert into userInfo values('张三','男',25) select @@rowcount
      

  15.   

    LZ是要把增、删、改、查完全都分出来?那不太好弄。。如果把增、删、改与查分开还是好分要不前台每个返回值都用int类型的变量去接收外面加try..catch比如说增、删、改,返回值一定是个int类型的。这样肯定不会报错如果报错表示返回类型肯定不对。在catch中用你查出来的返回类型去接收再绑定上去
      

  16.   

    不是这样的,我还是再明确一下我的要求吧
    用户输入sql,而程序自动判断sql会不会返回记录集,会的话,绑定到GridView,不会的话,返回影响的行数到目前为止,我所知道的方法就是
    1、自己写一个Sql解释器,分析出执行的sql,自然也就知道会不会返回记录集了;
    2、在SqlServer里,加一条语句,返回@@rowcount的值(不适用于其它数据库)
      

  17.   

    <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>