如何在没有CRecordset :: Open抛出的异常的情况下执行存储过程?

时间:2009-07-24 16:47:35

标签: sql-server mfc

我正在尝试从基于MFC的C ++程序在SQL Server上执行存储过程。存储过程确实正确执行,但在我的程序中抛出异常,CDBException带有“函数序列错误”消息。跟踪CRecordset :: Open的MFC源代码,从MoveNext抛出异常 - 这是有道理的,因为我的存储过程没有生成任何输出。

我有存储过程的输入和输出参数,所以我不能像这个问题中建议的那样使用CDatabase :: ExecuteSQL: With CDatabase, can I send SQL without using CRecordSet?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决问题的黑客,我等不及S.O.提供答案。我已经将问题追溯到CRecordSet :: MoveNext,它立即调用CRecordset :: Move。我没有立即意识到Move是虚拟的,所以可以用我自己的版本绕过它。

void CMyRecordset::Move(long nRows, WORD wFetchType)
{
    (void) nRows;
    (void) wFetchType;
    m_bEOF = true;
}