并非所有的代码路径返回一个值问题
问题描述:
我有这样一段代码在一个类(数据库)和我得到并非所有的代码路径返回一个值问题
并非所有的路径返回一个值。
任何帮助将非常感激。
public static DataSet DELETE_PDT(String rowid)
{
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand("sp_DELETE_PDT", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@rowid", SqlDbType.Int).Value = rowid;
con.ConnectionString = ConfigurationManager.ConnectionStrings["WMS"].ConnectionString;
try
{
con.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
}
catch (Exception ex)
{
throw new Exception("Error while deleting record. Please contact your System Administrator", ex);
}
}
答
你的方法应该有一个return value
因为你已经宣布它返回Dataset
。
例如,
return new Dataset();
,如果你不想看到错误消息,改变
public static DataSet DELETE_PDT(String rowid)
{
// statements
}
到
public static void DELETE_PDT(String rowid)
{
// statements
}
更新1
根据您的意见,我会修改它以再次返回字符串值。
public static string DELETE_PDT(String rowid)
{
using (SqlConnection con = new SqlConnection())
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["WMS"].ConnectionString;
using (SqlCommand cmd = new SqlCommand("sp_DELETE_PDT", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@rowid", SqlDbType.Int).Value = rowid;
try
{
if (con.State == ConnectionState.Open)
con.Close();
con.Open();
cmd.ExecuteNonQuery();
return "Record has been deleted";
}
catch (Exception ex)
{
return "Error while deleting record. Please contact your System Administrator";
}
}
}
}
答
你已经声明你的方法返回DataSet
...但你什么都不返回。所以...你需要返回一个DataSet
的实例或者改变你的方法签名。
答
您已声明该方法应该返回DataSet
,但它不返回任何内容(这对于该方法所做的操作是合乎逻辑的)。签名更改为:
public static void DELETE_PDT(String rowid)
边注:为了避免异常留下一个未关闭的连接,你可以使用using
。它确保命令和连接总是设置无论发生什么情况:
public static void DELETE_PDT(String rowid) {
using (SqlConnection con = new SqlConnection()) {
con.ConnectionString = ConfigurationManager.ConnectionStrings["WMS"].ConnectionString;
using (SqlCommand cmd = new SqlCommand("sp_DELETE_PDT", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@rowid", SqlDbType.Int).Value = rowid;
try {
con.Open();
cmd.ExecuteNonQuery();
} catch (Exception ex) {
throw new Exception("Error while deleting record. Please contact your System Administrator", ex);
}
}
}
}
+0
感谢您的帮助。 – jorame
答
我已经重构你的代码;试试这个:
public static void DELETE_PDT(String rowid) {
using(SqlConnection con = new SqlConnection()) {
con.ConnectionString = ConfigurationManager.ConnectionStrings["WMS"].ConnectionString;
using(SqlCommand cmd = new SqlCommand("sp_DELETE_PDT", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@rowid", SqlDbType.Int).Value = rowid;
try
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
throw new Exception("Error while deleting record. Please contact your System Administrator", ex);
}
}
}
}
谢谢大家的帮助。 – jorame