2012-09-24 81 views
1

我有这样一段代码在一个类(数据库)和我得到并非所有的代码路径返回一个值问题

并非所有的路径返回一个值。

任何帮助将非常感激。

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); 
    } 
} 
+0

谢谢大家的帮助。 – jorame

回答

0

你的方法应该有一个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"; 
      } 
     } 
    } 
} 
+0

再次谢谢你,约翰。 – jorame

+0

@jorame欢迎您。 –

+0

约翰问题,我现在如何从我的主代码中调用这个方法?这是我之前的'DataBase.DELETE_PDT(rowid);' – jorame

0

你已经声明你的方法返回DataSet ...但你什么都不返回。所以...你需要返回一个DataSet的实例或者改变你的方法签名。

+0

我可以改变它到什么地方?谢谢 – jorame

+0

将它改为'void' –

+0

@jorame:将返回类型改为void,即不返回任何内容,或者实际返回一个'DataSet'。 –

0

您已声明该方法应该返回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

0

我已经重构你的代码;试试这个:

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); 
      } 
     } 
    } 
} 
+0

谢谢你的帮助。 – jorame

+0

和我重新分解会采用'使用':) – naveen

相关问题