【问题标题】:Can't delete record when calling Stored Procedure from Web Service从 Web 服务调用存储过程时无法删除记录
【发布时间】:2014-04-09 17:47:32
【问题描述】:

我在一个包中有以下存储过程:

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;

这是我从网络服务中调用它的方式:

[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。发生了什么事?

【问题讨论】:

  • Web 服务以什么帐户运行(所以不需要知道这一点),它是否有权删除(但确实需要)?
  • 不应该将 cmd.CommandText 设为“DELETE_RECORD”吗?
  • @tonyriddle 谢谢;我已经更正了占位符
  • @AustinSalonen 我尝试使用 IIS7 的默认用户以及 Visual Studio 2010 ASP.NET Web 开发服务器的用户运行 Web 服务。数据库用户有删除权限。
  • 检查调用存储过程的账户。它可能没有执行删除的适当权限。

标签: c# .net oracle stored-procedures package


【解决方案1】:

代码没有错;用户被重新检查并被授予对表的所有权限,现在可以删除行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多