现在的位置: 首页 > 综合 > 正文

ADO记录集_RecordsetPtr访问SQL数据库

2013年08月10日 ⁄ 综合 ⁄ 共 987字 ⁄ 字号 评论关闭
使用ADO数据库技术_RecordsetPtr记录集执行存储过程时,遇到个怎么也解决不了的问题,就是执行的存储过程里有更新数据库的语句时就断掉连接。

_RecordsetPtr
m_pRecordset;

m_pRecordset->Open(_variant_t(LPCTSTR(m_strSQL)),

          
_variant_t((IDispatch*)m_pConnection->GetConnection(), true),

          
CursorType, LockType, lOption));

这狗日的问题拌了我一天,终于被一个不知名的看起来还有点崴的网站的一位高人道破!
网站:http://www.hlib.cn/dev/5700/5700437.htm
原文如下:

问题:用recordset
open来执行存储过程,如有修改删除表数据等操作,取其所属类,程序会崩溃,怎么解决?

具体:有一个存储过程,在执行的时候会插入和删除表的某些数据,最后select出一个结果集用recordset
open的方法来执行这个存储过程的时候没问题,然后在判断recordset
EndOfFile的时候,程序崩掉了,如果没有这些插入删除操作,程序是跑得没问题的,结果集数据都能取到,这是什么原因?是不是用ado的方法都会这样?因为是否结束的判断在取结果集数据的时候是必须得用上的,有没有其他办法可以代替这个方法?

正确答案:第 6
楼    leoppeng()

2007-8-10 14:46:10
得分:20  
你可以这样测试一下:
1.在调用m_pRecordset->EndOfFile或GetRecordCount()的时候看看结果集的状态
pRecordset->State;你这样的情况可能为0,这样在已经关闭的结果集上进行上述操作是错误的。
通常在存储过程中有delete等不是单纯的select语句时就会返回关闭的结果集。
2.如果确定是这个原因了,你可以在你的存储过程的最前面加“Set
Nocount On”

create proc name
as
Set Nocount On
虽然Set Nocount On表面看和记录集的关闭和打开没有联系。一般可以解决1的问题。

答案就是:要在存储过程procedure
'','','' as 后面加上Set Nocount On几个字符,这就费了我半天时光!

抱歉!评论已关闭.