2014-03-06 114 views
0

我有一個包裝內的以下存儲過程:無法刪除記錄

PROCEDURE DELETE_RECORD(serial IN NUMBER, code IN NUMBER, brand IN VARCHAR2, response OUT VARCHAR2) IS 
BEGIN 
    DELETE FROM CWPESME.cwpesme_campaign_subsc 
    WHERE 
    sku = serial 
    AND id = code 
    AND mfg = brand; 
    COMMIT; 
     response := 'SUCCESS'; 
    EXCEPTION WHEN OTHERS THEN 
     response := 'FAILURE '||SQLERRM; 
END DELETE_RECORD; 

這是我如何把它從Web服務:

[WebMethod] 
public string del_record(int serial, int code, string brand) 
{ 
    using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString)) 
    { 
     using (OracleCommand cmd = conn.CreateCommand()) 
     { 
      cmd.CommandText = "MyPackage.DELETE_RECORD"; 
      cmd.CommandType = System.Data.CommandType.StoredProcedure; 

      cmd.Parameters.Add("sku", OracleType.Number, 38).Direction = System.Data.ParameterDirection.Input; 
      cmd.Parameters["sku"].Value = serial; 
      cmd.Parameters.Add("id", OracleType.Number, 38).Direction = System.Data.ParameterDirection.Input; 
      cmd.Parameters["id"].Value = code; 
      cmd.Parameters.Add("mfg", OracleType.VarChar, 250).Direction = System.Data.ParameterDirection.Input; 
      cmd.Parameters["mfg"].Value = brand; 
      cmd.Parameters.Add("response", OracleType.VarChar, 550).Direction = System.Data.ParameterDirection.Output; 

      try 
      { 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       string result = cmd.Parameters["response"].Value.ToString(); 
       return result; 
      } 
      catch (Exception ex) 
      { 
       string result = cmd.Parameters["response"].Value.ToString(); 
       return (result != string.Empty) ? result : "[FAILURE] " + ex.ToString(); 
      } 
     } 
    } 
} 

如果直接調用存儲過程,我可以刪除記錄,但在從Web服務調用時不能這樣做。然而,我可以用這種方式SELECTUPDATE。發生了什麼?

+0

運行的Web服務是什麼帳戶(SO不需要知道這一點),並且它是否有權刪除(但確實需要)? –

+1

不應該cmd.CommandText be =「DELETE_RECORD」? – tonyriddle

+0

@tonyriddle謝謝;我已更正佔位符 –

回答

0

代碼沒有錯;用戶被重新檢查並授予對錶的所有權限,現在可以刪除行。