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服務調用時不能這樣做。然而,我可以用這種方式SELECT
和UPDATE
。發生了什麼?
運行的Web服務是什麼帳戶(SO不需要知道這一點),並且它是否有權刪除(但確實需要)? –
不應該cmd.CommandText be =「DELETE_RECORD」? – tonyriddle
@tonyriddle謝謝;我已更正佔位符 –