2009-07-24 40 views
0

我想從基於MFC的C++程序在SQL Server上執行存儲過程。存儲過程確實得到了正確執行,但在我的程序中拋出了一個異常,這是一個CDBException,其消息爲「函數序列錯誤」。追蹤CRecordset :: Open的MFC源代碼,從MoveNext拋出異常 - 這是有道理的,因爲我的存儲過程沒有生成任何輸出。如何執行CRecordset :: Open引發的異常存儲過程?

我有輸入和輸出參數的存儲過程,所以我不能使用的CDatabase ::的ExecuteSQL在這個問題建議: With CDatabase, can I send SQL without using CRecordSet?

+1

看看你的分數,我的建議可能聽起來很愚蠢。您可以修改存儲過程以返回1(即將SELECT 1放在最後)。 – shahkalpesh 2009-07-24 16:56:48

回答

0

我終於想出了一個黑客來解決這個問題,我等不及了提供答案。我已經將問題追溯到CRecordSet :: MoveNext,它立即調用CRecordset :: Move。我沒有立即意識到Move是聲明爲虛擬的,所以可以用我自己的版本繞過它。

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