Sql server 如何执行CRecordset::Open抛出的存储过程而不发生异常? 我试图从基于MFC的C++程序上在SQLServer上执行一个存储过程。存储过程确实得到了正确执行,但在我的程序中引发了一个异常,一个带有函数序列错误消息的CDBEException。通过跟踪CRecordset::Open的MFC源代码,从MoveNext引发异常-这是有意义的,因为我的存储过程没有生成任何输出

Sql server 如何执行CRecordset::Open抛出的存储过程而不发生异常? 我试图从基于MFC的C++程序上在SQLServer上执行一个存储过程。存储过程确实得到了正确执行,但在我的程序中引发了一个异常,一个带有函数序列错误消息的CDBEException。通过跟踪CRecordset::Open的MFC源代码,从MoveNext引发异常-这是有意义的,因为我的存储过程没有生成任何输出,sql-server,mfc,Sql Server,Mfc,我有存储过程的输入和输出参数,所以我不能像这个问题中建议的那样使用CDATA Base::ExecuteSQL: 我终于想出了一个解决问题的方法,我迫不及待地等待S.O.提供答案。我已经将问题追溯到CRecordSet::MoveNext,它立即调用CRecordSet::Move。我没有立即意识到的是,Move被声明为虚拟的,所以可以用我自己的版本绕过它 void CMyRecordset::Move(long nRows, WORD wFetchType) { (void) nRow

我有存储过程的输入和输出参数,所以我不能像这个问题中建议的那样使用CDATA Base::ExecuteSQL:

我终于想出了一个解决问题的方法,我迫不及待地等待S.O.提供答案。我已经将问题追溯到CRecordSet::MoveNext,它立即调用CRecordSet::Move。我没有立即意识到的是,Move被声明为虚拟的,所以可以用我自己的版本绕过它

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

看看你的分数,我的建议可能听起来很愚蠢。您可以修改存储过程以返回1,即将SELECT 1放在末尾。我不知道这是否有效。但您可以将对SP的调用与SELECT 1相结合,例如mystoredproc@x、@y;选择1@shahkalpesh-没那么傻,如果你把它留作回答,我会投赞成票的。别让分数误导你,我敢打赌乔恩·斯基特有几件事是不知道的。