2009-07-24 24 views
0

MFCベースのC++プログラムからSQL Server上のストアドプロシージャを実行しようとしています。ストアドプロシージャは正常に実行されますが、プログラム内で例外がスローされます。プログラムには「Function sequence error」というメッセージが含まれています。 CRecordset :: OpenのMFCソースコードをトレースすると、MoveNextから例外がスローされます。これは、ストアドプロシージャが出力を生成していないので意味があります。 、私は最終的に問題を解決するためにハックを思い付いた With CDatabase, can I send SQL without using CRecordSet?CRecordset :: Openによってスローされた例外なくストアドプロシージャを実行する方法?

+1

あなたのスコアを見ると、私の提案はダムと聞こえるかもしれません。ストアドプロシージャを変更して1を返します(つまり、最後にSELECT 1を挿入します)。 – shahkalpesh

+0

これが動作するかどうかわかりません。しかし、あなたはSPへの呼び出しをSELECT 1と組み合わせることができます(例えば、mystoredproc @x、@y; SELECT 1) – shahkalpesh

+1

@shahkalpesh - あなたが答えとして残していたならば、それをアップヴォートにしました。そしてスコアがあなたを惑わせないようにしてください。私はJon Skeetが知らないことがいくつかあると確信しています。 –

答えて

0

は、私は、ストアドプロシージャへの入力と出力の両方のパラメータを持っているので、この質問で提案されているように私はのCDatabase ::は、ExecuteSQLを使用することはできません私はSOを待つことができませんでした答えを提供する。私はすでに問題をCRecordSet :: MoveNextにトレースしました。これはすぐにCRecordset :: Moveを呼び出します。私が直ちに気付かなかったことは、Moveがバーチャルであると宣言されているので、自分のバージョンでバイパスすることが可能です。

void CMyRecordset::Move(long nRows, WORD wFetchType) 
{ 
    (void) nRows; 
    (void) wFetchType; 
    m_bEOF = true; 
} 
関連する問題