我在vc代码中,调用一个存储过程sql="{call proc_name}";
在这个存储过程内容大概如下:
             create ...
             as
              if...
              begin
                select...........
              end
              else...
              begin
                select...........
              end
在vc代码中,利用CRecordset.open成功,可是在CRecordset.move()的时候,抛出S1106异常.
调试发现;只要屏蔽掉存储过程中的if...else语句.就可以正确执行,请同仁多多指教.

解决方案 »

  1.   

    没遇到过,你看看
    http://www.codeproject.com/database/MyRecordset.asp
    GOOD LUCK
      

  2.   

    多谢,我看过http://www.codeproject.com/database/MyRecordset.asp文章,可还是没有找到合适的解决途径.我通过调试,当我用同一个CRecordset.Open函数执行sql语句的select语句和{call proc},然后
    SQLGetStmtAttr(rs.m_hstmt,SQL_ATTR_CURSOR_TYPE,&val,1,&num);却发现:当Open函数执行select 语句或者存储过程(中不是if..else结构的select语句)的时候,SQL_ATTR_CURSOR_TYPE是SQL_CURSOR_STATIC(静态的),也就是可以滚动的,可是同一个函数执行完发帖中的那种有if..else模式的存储过程之后,发现SQL_ATTR_CURSOR_TYPE的值是SQL_CURSOR_FORWARD_ONLY,也就是说游标变成了不能滚动的了.所以才会导致我在取记录集中的数据集时移动记录出错.可是我在调用SQLGetStmtAttr()函数后,再掉SQLSetStmtAttr()函数,把游标状态设置为可滚动状态,可是还是不能解决问题,请高手指教!
      

  3.   

    多谢,我看过http://www.codeproject.com/database/MyRecordset.asp文章,可还是没有找到合适的解决途径.通过调试:
    1、当用同一个CRecordset.Open函数执行sql语句的select语句或者{call proc},
    2、然后,SQLGetStmtAttr(rs.m_hstmt,SQL_ATTR_CURSOR_TYPE,&val,1,&num);
       却发现:
           当Open函数执行select 语句或者存储过程(中不是if..else结构的select语句)的时  
       候,SQL_ATTR_CURSOR_TYPE是SQL_CURSOR_STATIC(静态的),也就是可以滚动的;
          可是同一个函数执行完发帖中的那种有if..else模式的存储过程之后,发现  
       SQL_ATTR_CURSOR_TYPE的值是SQL_CURSOR_FORWARD_ONLY,也就是说游标变成了不能滚动的了.
          所以才会导致我在取记录集中的数据集时移动记录出错.
    3、可是在调用SQLGetStmtAttr()函数后,再调用SQLSetStmtAttr()函数,把游标状态设置为可滚动状态,可是还是不能解决问题,请高手指教!