ホームページ >データベース >mysql チュートリアル >ストアド プロシージャが「プロシージャまたは関数は指定されていないパラメータを必要としています」エラーをスローするのはなぜですか?
ストアド プロシージャ パラメータの不一致: "プロシージャまたは関数は指定されていないパラメータを必要としています"
データベース接続を使用する場合は、位置を調整することが重要ですストアド プロシージャで定義されたパラメータと呼び出しコードから渡されたパラメータ。これを行わないと、「プロシージャまたは関数 'SHOWuser' はパラメータ '@userID' を要求していますが、指定されていません。」
この例では、ストアド プロシージャ SHOWuser は受信することが期待されています。 3 つのパラメータ: @userName、@password、および @emailAddress。ただし、コードは @userID パラメータの値を指定せずにストアド プロシージャを実行しようとします。このパラメータはプロシージャ内の後続の INSERT ステートメントと SELECT ステートメントで使用されます。
パラメータの不一致の解決
この問題を解決するには、ストアド プロシージャに必要なすべてのパラメーターが cmd.Parameters に含まれていることを確認する必要があります。 collection:
cmd.Parameters.AddWithValue("@userName", userName); cmd.Parameters.AddWithValue("@password", password); cmd.Parameters.AddWithValue("@emailAddress", emailAddress); cmd.Parameters.AddWithValue("@userID", user_id); // Add the missing parameter
必要なパラメータをすべて指定すると、ストアド プロシージャはパラメータの不一致エラーが発生せずに正常に実行されるはずです。
追加の考慮事項
コマンドのタイプは、保存されたコマンドとして明示的に指定する必要があることにも注意してください。プロシージャ:
cmd.CommandType = System.Data.CommandType.StoredProcedure;
これにより、データベース サーバーが実行されるコマンドの性質を認識できるようになります。コマンドの種類を指定しないと、予期しない動作が発生する可能性があります。
以上がストアド プロシージャが「プロシージャまたは関数は指定されていないパラメータを必要としています」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。