出力ストアド プロシージャ パラメータの解析が明らかに間違っているため、このエラーが発生しました。
制御が現在のメソッドを離れる前に、out パラメータ 'whichID' を割り当てる必要があります
コード:
public static bool CreateFilmTest(string param1, string param2, out int whichID)
{
DbCommand com = GenericDataAccess.CreateCommand();
com.CommandText = "CatalogCreateFilmTest";
DbParameter param = com.CreateParameter();
param.ParameterName = "@param1";
param.Value = param1;
param.DbType = DbType.String;
param.Size = 200;
com.Parameters.Add(param);
..........
param = com.CreateParameter();
param.ParameterName = "@Fid";
param.Direction = ParameterDirection.Output;
param.DbType = DbType.Int32;
com.Parameters.Add(param);
int result = -1;
try
{
result = GenericDataAccess.ExecuteNonQuery(com);
whichID = Int32.Parse(com.Parameters["@Fid"].Value.ToString());
}
catch
{
// ....
}
return (result >= 1);
}
return 行の直前に:whichID = Int32.Parse(com.Parameters["@Fid"].Value.ToString());
行を配置すると、メソッドは正常に実行され、正しい結果が得られます。
ただし、try ブラケット内に配置すると、冒頭で述べたエラーが発生します。
なんでそうなの?
私の最初の選択は、 try ブラケット内に配置することでした。これは、何らかの理由で IF がExecuteNonQuery
失敗した場合、その出力パラメーター ( ) を処理する意味がないためwhichID
です。したがって、try ブロック内で 2 つの要素 (プロシージャーの実行とプロシージャーからの出力パラメーターの処理) を結合するのが最善であると考えましたcatch
。
ご意見をお待ちしております。ありがとう。アンナ