由于输出存储过程参数的解析明显放错了位置,我遇到了这个错误。
在控制离开当前方法之前,必须分配 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);
}
如果我将: whichID = Int32.Parse(com.Parameters["@Fid"].Value.ToString());
line放在 return line 之前,该方法将成功执行并给出正确的结果。
但是,如果我将它放在 try 括号内,它会给出开头提到的错误。
为什么这样?
我的第一选择是把它放在 try 括号内,因为如果由于任何原因ExecuteNonQuery
失败,处理它的输出参数 () 是没有意义的whichID
。因此,我认为最好将 try 块中的两个元素(过程的执行和过程中的输出参数的处理)结合起来,以在发生错误的情况下触发内部对这种情况的优雅处理catch
。
非常感谢您的意见。谢谢。安娜