我在vc代码中,调用一个存储过程sql="{call proc_name}";
在这个存储过程内容大概如下:
create ...
as
if...
begin
select...........
end
else...
begin
select...........
end
在vc代码中,利用CRecordset.open成功,可是在CRecordset.move()的时候,抛出S1106异常.
调试发现;只要屏蔽掉存储过程中的if...else语句.就可以正确执行,请同仁多多指教.
在这个存储过程内容大概如下:
create ...
as
if...
begin
select...........
end
else...
begin
select...........
end
在vc代码中,利用CRecordset.open成功,可是在CRecordset.move()的时候,抛出S1106异常.
调试发现;只要屏蔽掉存储过程中的if...else语句.就可以正确执行,请同仁多多指教.
http://www.codeproject.com/database/MyRecordset.asp
GOOD LUCK
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()函数,把游标状态设置为可滚动状态,可是还是不能解决问题,请高手指教!
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()函数,把游标状态设置为可滚动状态,可是还是不能解决问题,请高手指教!