3

次のコードを使用します。

MySqlParameter curParam = new MySqlParameter("var", MySqlDbType.Int32);
curParam.Direction = System.Data.ParameterDirection.Output;
oCmd.Parameters.Add(curParam);

次のストアド プロシージャを使用します。

CREATE PROCEDURE testProc(OUT var INT)
BEGIN
    SELECT 1, 2, 3;
    SELECT 27 INTO var;
END
$$

コンソールからこれを実行すると、「27」が返されます。

CALL testProc(@i);
SELECT @i;

ただし、.NET では、クエリを実行するとき (接続がまだ開いているとき)、curParam.value は NULL を返します。

それ以外の場合、ストアド プロシージャは正しい結果を返します。さらに、ストアド プロシージャをコンソールで直接実行すると、出力パラメーターも正しく返されます。

何か不足していますか?

4

1 に答える 1

3

出力パラメーターは、リーダーが閉じられた後にのみ設定されます。パラメータ値を取得するときと比較して、コードがリーダーを実行するのはいつですか?

于 2013-12-26T19:30:20.880 に答える