由于某种原因,我似乎无法以捕获此存储过程的返回值(0或-1)的方式进行返回,要么它返回用于初始化变量的值,要么一直告诉我本地变量未分配。
public int changePass(int idUsuario, String old_pass, String new_pass)
{
int result;
try
{
DataTable tablaResultado =
DataBaseAccess.advanceStoredProcedureRequest(
"pa_usuario_change_pass",
new SPP[]
{
new SPP("id_usuario", idUsuario.ToString()),
new SPP("old_pass", old_pass.ToString()),
new SPP("new_pass", new_pass.ToString())
});
if (tablaResultado.Rows.Count > 0)
{
if (tablaResultado.Rows[0] != null)
{
result = (int.Parse(tablaResultado.Rows[0].ItemArray[0].ToString()));
}
}
return result;
}
catch (System.Data.SqlClient.SqlException sqlException)
{
throw sqlException;
}
}
我有多种方法遵循相同的模式,所有这些工作,我已经尝试了一段时间,我确信我忽略了一些非常明显的东西。不管怎样,我现在都找不到它,所以我希望有人能刷新我的记忆或给我一个提示。
如果两个不同的条件恰好都是true
,则代码仅为result
变量赋值。也就是说,如果行计数>0,并且第一行不是null。编译器完全合法地告诉您,您的代码包含指向return
语句的路径,其中所使用的变量尚未被赋值。
如果这两个条件中的任何一个是而不是true,则需要决定该方法应该返回什么,然后将该值分配给result
变量,作为其初始化的一部分。
编辑:
需要明确的是:您可能忽略了代码无法成功执行存储过程的可能性。但只有当这两个条件为真时,它才能返回要分配给result
的值。当其中一个或另一个条件不成立时,您需要选择一个合理返回的默认值,或者您需要修复代码,使这些条件始终为真(从而SP始终成功执行)。