C#错误 - 并非所有代码路径返回值

时间:2017-02-03 19:15:23

标签: c#

我在方法getdatatoTextbox中收到错误“并非所有代码路径都返回值”。

请帮我解决这个问题。

private DataTable getdatatoTextbox(int RegistrationId)
{
    try
    {
        SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=DotNetFunda;User id=sa;Password=sqluser");
        con.Open();
        SqlCommand sqlcmd = new SqlCommand("Getdatatotextbox", con);
        sqlcmd.CommandType = CommandType.StoredProcedure;
        sqlcmd.Parameters.AddWithValue("@RegistrationId", SqlDbType.Int).Value = RegistrationId;
        DataTable dtdatanew = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
        da.Fill(dtdatanew);
        con.Close();
        return dtdatanew;
    }
    catch (Exception ex)
    {
    }
    finally
    {
        con.Dispose();
    }
}

1 个答案:

答案 0 :(得分:9)

如果异常事件没有返回,如果您的方法中有非void返回类型,则无效。也永远不会吞下异常,这是一种不好的做法,当出现问题时,你会回来询问有关原因的问题。

另一方面,您应该将所有Disposable包装在using块中。如果您的查询失败,您的Db连接将保持打开您的代码现在的方式,我知道您已经在finally中有了dispose但是甚至无法编译,因为您在try块中定义了它。

这可以解决问题,并在出现意外情况时给你一个例外(一件好事)。您可以在方法之外处理它,或让它冒泡到原始调用者然后执行某些操作。

private DataTable getdatatoTextbox(int RegistrationId)
{
    using(SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=DotNetFunda;User id=sa;Password=sqluser"))
    using(SqlCommand sqlcmd = new SqlCommand("Getdatatotextbox", con))
    using(SqlDataAdapter da = new SqlDataAdapter(sqlcmd))
    {
        con.Open();
        sqlcmd.CommandType = CommandType.StoredProcedure;
        sqlcmd.Parameters.AddWithValue("@RegistrationId", SqlDbType.Int).Value = RegistrationId;
        DataTable dtdatanew = new DataTable();
        da.Fill(dtdatanew);
        return dtdatanew;
    }
}