由于某种原因,我似乎无法以捕获此存储过程的返回值(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;
}
}
我有多种方法遵循相同的模式,并且所有这些都是有效的,我一直试图让它工作一段时间,我确信我忽略了一些非常非常明显的东西。无论哪种方式,我现在都找不到它,所以我希望有人可以刷新我的记忆或给我一个提示。
答案 0 :(得分:2)
如果两个不同的条件都恰好是result
,则代码仅为true
变量赋值。也就是说,如果行数是> 0并且第一行是非null。编译器完全合理地告诉您,您的代码包含return
语句的路径,其中所使用的变量尚未赋值。
如果其中任何一个条件不为true,则需要确定该方法应返回的内容,然后将该值作为初始化的一部分分配给result
变量。
编辑:
要明确:似乎您可能忽略了代码无法成功执行存储过程的可能性。但是当这两个条件为真时,它只能返回一个赋值给result
的值。您需要选择一个合理的默认值,当一个或另一个条件不为真时返回,或者您需要修复代码以使这些条件始终为真(因此SP始终成功执行)