1

实际上我的代码显示错误“并非所有代码路径都返回值”

public DataTable Do_Insert_Update_Delete(string Proc_name, params object[] arg)
{
    if (Proc_name == "Vehicle_Booked_Info")
    {
        SqlCommand com = new SqlCommand("Vehicle_Booked_Info", con);
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.Add(" @Today_Date", SqlDbType.DateTime).Value = Convert.ToDateTime(arg[0].ToString());
        SqlDataAdapter sda = new SqlDataAdapter(com);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        return dt;
    }
}

即使我放在这里return dt

如果我在 if 子句中使用它,则会显示错误

dt 在当前上下文中不存在

如何克服这一点?

4

4 回答 4

1

您在语句内部返回if,编译器无法确定是否满足条件。您需要在块之外或在 else 块中返回一些东西if,因为您的方法应该返回一个 type 的对象DataTable,现在如果Proc_name不是"Vehicle_Booked_Info",您的方法将不会返回任何东西。所以改变你的方法,比如:

public DataTable Do_Insert_Update_Delete(string Proc_name, params object[] arg)
{
    if (Proc_name == "Vehicle_Booked_Info")
    {
        SqlCommand com = new SqlCommand("Vehicle_Booked_Info", con);
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.Add(" @Today_Date", SqlDbType.DateTime).Value = Convert.ToDateTime(arg[0].ToString());
        SqlDataAdapter sda = new SqlDataAdapter(com);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        return dt;
    }
  else
    { 
     return null; //Or some default value.
    }       
}
于 2013-02-25T11:12:40.197 回答
1
public DataTable Do_Insert_Update_Delete(string Proc_name, params object[] arg)
{
    DataTable dt = new DataTable();
    if (Proc_name == "Vehicle_Booked_Info")
    {
        SqlCommand com = new SqlCommand("Vehicle_Booked_Info", con);
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.Add(" @Today_Date", SqlDbType.DateTime).Value =       Convert.ToDateTime(arg[0].ToString());
        SqlDataAdapter sda = new SqlDataAdapter(com);
        sda.Fill(dt);
    }       
        return dt;
}
于 2013-02-25T11:25:20.417 回答
0

return null;在方法结束之前添加:

    }       
    return null;
}

else短语在这里是不必要的。

if编译器显示错误,因为在不满足语句条件时该方法不返回值。

于 2013-02-25T11:13:45.183 回答
0

这是一个糟糕的代码实践..

将其更改为以下

public DataTable Do_Insert_Update_Delete(string Proc_name, params object[] arg)
{
    if (Proc_name == "Vehicle_Booked_Info")
    {
        SqlCommand com = new SqlCommand("Vehicle_Booked_Info", con);
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.Add(" @Today_Date", SqlDbType.DateTime).Value = Convert.ToDateTime(arg[0].ToString());
        SqlDataAdapter sda = new SqlDataAdapter(com);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        return dt;

    }       

    return new DataTable();// or return null


}
于 2013-02-25T11:13:49.873 回答