C# でのストアド プロシージャからの戻り値の取得のトラブルシューティング
C# でストアド プロシージャから戻り値を取得しようとすると、次のことが考えられます。戻り値が null になるという問題が発生します。この問題と解決策の詳細な説明は次のとおりです。
問題の説明:
入力として @a という 2 つのパラメーターを取る Transact-SQL ストアド プロシージャを定義しました。出力として @b を返します。ストアド プロシージャは @b をクエリの結果に設定し、C# コードで @b の値を取得することが期待されます。ただし、ストアド プロシージャを実行して戻り値を読み取ろうとすると、null が返されます。
コード スニペット:
SqlConnection SqlConn = ...; SqlCommand sqlcomm = new SqlCommand("Validate", SqlConn); sqlcomm.CommandType = CommandType.StoredProcedure; sqlcomm.Parameters.Add("...", SqlDbType.VarChar, ParameterDirection.Input); SqlParameter retval = sqlcomm.Parameters.Add("...", SqlDbType.VarChar); retval.Direction = ParameterDirection.ReturnValue; sqlcomm.ExecuteNonQuery(); // MISSING string retunvalue = (string)sqlcomm.Parameters["..."].Value;
ロジック エラー:
C# ルーチンに欠けているコード部分は、ExecuteNonQuery 呼び出しです。ストアド プロシージャを実行すると、データベース クエリが開始され、出力パラメータ @b が更新されます。この呼び出しがないとストアド プロシージャは実行されず、戻り値は変更されません。
解決策:
戻り値を取得する前に ExecuteNonQuery メソッドを含めます:
sqlcomm.ExecuteNonQuery(); string retunvalue = (string)sqlcomm.Parameters["..."].Value;
この変更を加えた後、コードは格納されている @b に割り当てられた戻り値を正しく取得するようになります。手順。
以上がストアド プロシージャから戻り値を取得するときに、C# コードが null 値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。