我在方法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();
}
}
答案 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;
}
}