我想做一个SQL查询分析器,现在难点如下:假设我要执行如下命令:use testgoselect * from tab1delete tab2 我需要的信息是select出来的表,还有影响行,还有delete的影响行,不要让我用什么间隔符把命令隔开(因为我要做的就是和SQL查询分析器一样的功能)。我已经在SQLDMO找到SQLDMOServer对象的一个方法ExecuteWithResultsAndMessages(命令文本,命令长度,out  输出消息).这个方法能执行SQL的代码,但是他返回的是一个SQLDMO.QueryResults对象,里面找不到数据,而且那个输出消息的变量也在执行后为null,没有变化。现在急需高手指导一下,我的要求:能执行一段任意的SQL代码,而且能返回数据集和返回消息

解决方案 »

  1.   


    我想,你可以接受上面这样的输入,在得到输入后,试着用 Regex 把 go 以及其他语句行末的换行符替换为分号,再交给 sqlcmd 执行,不知可否?
      

  2.   

    如果一个 sql 语句分成多行写,就会有些麻烦,这种情形比较难以判断。
      

  3.   


    可能你没试过其实 use 这个命令也是不能在sqlcmd中执行的,所以我觉得用Regex替换的话不是很好,如果在一个服务器下用户就是要用use换数据库操作那不是就没用了吗
      

  4.   

    你能在存储过程中返回消息的办法吗?比说如执行了下面命令execute('select * from tab1 delete tab2 ')能把如下消息返回吗
    影响10行(这里是假设)影响3行
      

  5.   

    xtjcmsum 你好!
    -----
    use test go select * from tab1 delete tab2 你 use ,就需要更换连接了。
    然后,如果你要实现诸如 SQL查询分析器。可是你想过语法检查没有?
    与其这样,为什么不轻松点?让用户输入:----
    select * from tab1;
    select * from tab2;
    select * from tab3;
    delete tab2;
    delete tab3;
    ----然后你又要判断这是什么语法?(返回表?单值?NonQuery?)
    一般来讲。只要将 splict 分号,然后检查第一个单词……switch 一下。变通下,你想完全模仿是很难的(至少对我来说,好难)。拙见。希望可以给你帮助。