用recordset open来执行存储过程,如有修改删除表数据等操作,取其EndOfFile程序会崩溃,如何解决
用recordset open来执行存储过程,如有修改删除表数据等操作,取其EndOfFile程序会崩溃,怎么解决?
有一个存储过程,在执行的时候会插入和删除表的某些数据
最后select出一个结果集
用recordset open的方法来执行这个存储过程的时候没问题
然后在判断recordset EndOfFile的时候,程序崩掉了
如果没有这些插入删除操作,程序是跑得没问题的,结果集数据都能取到
这是什么原因?是不是用ado的方法都会这样?
因为是否结束的判断在取结果集数据的时候是必须得用上的
有没有其他办法可以代替这个方法?
------解决方案--------------------
你可以这样测试一下:
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的问题。
有一个存储过程,在执行的时候会插入和删除表的某些数据
最后select出一个结果集
用recordset open的方法来执行这个存储过程的时候没问题
然后在判断recordset EndOfFile的时候,程序崩掉了
如果没有这些插入删除操作,程序是跑得没问题的,结果集数据都能取到
这是什么原因?是不是用ado的方法都会这样?
因为是否结束的判断在取结果集数据的时候是必须得用上的
有没有其他办法可以代替这个方法?
------解决方案--------------------
你可以这样测试一下:
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的问题。