ADO记录集_RecordsetPtr访问SQL数据库

使用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几个字符,这就费了我半天时光!

你可能感兴趣的:(sql,数据库,测试,delete,存储)