2012-09-24 77 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

相關問題