return语句中的未分配变量

时间:2014-11-07 07:28:37

标签: c# datatable sqlclient

由于某种原因,我似乎无法以捕获此存储过程的返回值(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;
    }
}

我有多种方法遵循相同的模式,并且所有这些都是有效的,我一直试图让它工作一段时间,我确信我忽略了一些非常非常明显的东西。无论哪种方式,我现在都找不到它,所以我希望有人可以刷新我的记忆或给我一个提示。

1 个答案:

答案 0 :(得分:2)

如果两个不同的条件都恰好是result,则代码仅为true变量赋值。也就是说,如果行数是> 0并且第一行是非null。编译器完全合理地告诉您,您的代码包含return语句的路径,其中所使用的变量尚未赋值。

如果其中任何一个条件为true,则需要确定该方法应返回的内容,然后将该值作为初始化的一部分分配给result变量。

编辑:

要明确:似乎您可能忽略了代码无法成功执行存储过程的可能性。但是当这两个条件为真时,它只能返回一个赋值给result的值。您需要选择一个合理的默认值,当一个或另一个条件不为真时返回,或者您需要修复代码以使这些条件始终为真(因此SP始终成功执行)