【问题标题】:Issue while adding Parameters to an Oracle Stored procedure向 Oracle 存储过程添加参数时出现问题
【发布时间】:2020-09-27 13:40:00
【问题描述】:

所以我正在修改一份现有的报告。我们还需要维护旧的。所以我创建了一个存储过程,我相信 SP 工作正常。我在 PL/SQL 中对其进行了测试。以下是执行现有SP的代码

    public static DataSet getReportDataAssetQualityCrisil(string pSPName, int v_UID, string v_FromDt, string v_ToDt, int v_round, string Flag,
                string v_Gilt, string RequestSessionID, string ReportName)
            {
                string strErrMsg = "";
                try
                {
                    DataSet objInvDataSet = null;
                    Database db = DatabaseFactory.CreateDatabase("MutualFund");
                    objInvDataSet = new DataSet();
                    DbCommand dbCmd = db.GetStoredProcCommand(pSPName);
                    dbCmd.CommandType = CommandType.StoredProcedure;
                    db.DiscoverParameters(dbCmd);

                    db.SetParameterValue(dbCmd, "v_UID", v_UID);
                    db.SetParameterValue(dbCmd, "v_FromDt", v_FromDt);
                    db.SetParameterValue(dbCmd, "v_ToDt", v_ToDt);
                    db.SetParameterValue(dbCmd, "v_round", v_round);
                    db.SetParameterValue(dbCmd, "v_Flag", Flag.ToUpper().ToString());

                    db.SetParameterValue(dbCmd, "v_Gilt", v_Gilt);
                    db.SetParameterValue(dbCmd, "V_REQUESTSESSIONID", RequestSessionID);
                    db.SetParameterValue(dbCmd, "v_REPORTTYPE", ReportName);
                    db.SetParameterValue(dbCmd, "resultset_out", null);
                    objInvDataSet = db.ExecuteDataSet(dbCmd);

                    return objInvDataSet;
                }
                catch (Exception ex)
                {
                    strErrMsg = ex.Source;
                    strErrMsg = ex.Message;
                    strErrMsg = ex.StackTrace;
                    return null;
                }
            }
The new report has fewer parameters. Following is the code for the new procedure that I created.
        public static DataSet getReportDataAssetQualityCrisilRevised(string pSPName, string V_FROMDT, string V_TODT, int V_UID, string RequestSessionID)
        {
            string strErrMsg = "";
            try
            {
                DataSet objInvDataSet = null;
                Database db = DatabaseFactory.CreateDatabase("MutualFund");
                objInvDataSet = new DataSet();

                DbCommand dbCmd = db.GetStoredProcCommand(pSPName);
                dbCmd.CommandType = CommandType.StoredProcedure;
                db.DiscoverParameters(dbCmd);
                db.SetParameterValue(dbCmd, "V_FROMDT", V_FROMDT);
                db.SetParameterValue(dbCmd, "V_TODT", V_TODT);
                db.SetParameterValue(dbCmd, "V_UID", V_UID);                
                db.SetParameterValue(dbCmd, "RESULTSET_OUT", null);
                db.SetParameterValue(dbCmd, "V_REQUESTSESSIONID", RequestSessionID);

                objInvDataSet = db.ExecuteDataSet(dbCmd);

                return objInvDataSet;
            }
            catch (Exception ex)
            {
                strErrMsg = ex.Source;
                strErrMsg = ex.Message;
                strErrMsg = ex.StackTrace;
                return null;
            }
        }

但是,当执行控制超过 db.setParameterValue 时,我收到一个异常,提示“此 OracleParameterCollection 不包含带有 ParameterName 'V_FROMDT' 的 OracleParameter。”

这两个函数在同一个类中。

【问题讨论】:

  • SetParameterValue 是否也将参数添加到命令中,还是只是像名称所暗示的那样设置值?另外,参数名称是否区分大小写?
  • 老实说,我不知道。我发现了一件事。如果我将程序的名称更改为上面已经存在的名称,系统就能够选择参数,这告诉我某处存在某种映射。我在整个解决方案中搜索了现有 SP 的名称,但在其他任何地方都找不到,
  • @Crowcoder,现在我已经使用了一段时间的 oracle,C# 中的 oracle 参数名称不区分大小写。
  • @Crowcoder 另外,discover参数方法实际上是连接数据库中的SP获取参数个数。我的 Oracle SP 中存在编译时错误,这就是我遇到此问题的原因。由于我有 MS SQL 背景,我从来不知道 oracle 保存带有编译错误的 SP,因为 MS SQL 不允许这样做。

标签: c# oracle ado.net


【解决方案1】:

存储过程中的编译错误是造成此错误的原因。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多