c# - 调用 Oracle 存储过程。获取 'No Data Found' 异常

标签 c# oracle stored-procedures

我正在尝试调用返回 XMLType 数据的 Oracle 存储过程,但我收到的只是“未找到数据异常”。表中有数据。我已经检查过,然后再次检查。 我的调用存储过程的代码有问题吗?也许有些明显的东西,我完全错过了。

using (OracleConnection dbc = new OracleConnection("Data Source=test; User ID=user; Password=pwd"))
{
   dbc.Open();
   using (DbTransaction trans = dbc.BeginTransaction())
   {
      try
      {
         DbCommand comm = dbc.CreateCommand();
         comm.CommandType = CommandType.StoredProcedure;
         comm.CommandText = "TestStoredProcedure";
         comm.Transaction = trans;

         OracleParameter returnParam = new OracleParameter("result", OracleDbType.XmlType);
         returnParam.Direction = ParameterDirection.ReturnValue;
         comm.Parameters.Add(returnParam);

         OracleParameter param1 = new OracleParameter("param1", OracleDbType.Varchar2);
         param1.Direction = ParameterDirection.Input;
         param1.Size = 70;
         param1.Value = "testing";
         comm.Parameters.Add(param1);

         OracleParameter param2 = new OracleParameter("param2", OracleDbType.Varchar2);
         param1.Direction = ParameterDirection.Input;
         param1.Size = 70;
         param1.Value = "testing";
         comm.Parameters.Add(param2);

         OracleParameter param3 = new OracleParameter("param3", OracleDbType.Date);
         param1.Direction = ParameterDirection.Input;
         param1.Value = Convert.ToDateTime("1/18/2011 12:00:00 AM");
         comm.Parameters.Add(param3);

         comm.ExecuteNonQuery(); //exception at this line

         OracleXmlType oracleXml = (OracleXmlType)comm.Parameters["result"].Value;
         XmlDocument xmlDoc = oracleXml.GetXmlDocument();
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex.ToString());
      }
   }
}

存储过程:

declare
  -- Non-scalar parameters require additional processing 
  result sys.xmltype;
begin
  -- Call the function
  result := mktadmin.test_package.test(param1 => :testval1,
                                       param2 => :testval2,
                                       param3 => :testval3);
end;

编辑:忽略名称中的任何差异。我必须对其进行编辑才能发布到此处。

最佳答案

看起来您正在覆盖 param2 和 param3 部分分配中的 param1 属性。

关于c# - 调用 Oracle 存储过程。获取 'No Data Found' 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995517/

相关文章:

oracle - 设置mysql复制延迟

java - 使用带 REF_CURSOR 的存储过程的 Spring 存储库

c# - 如何在任何 win 表单应用程序中加密 AppConfig 文件的一部分?

c# - 获取 ScriptHandlerFactory 处理程序

c# - 我可以在 Python3 中使用不同的代码点吗?

c# - Entity Framework 到 MySql 连接到数据库失败

sql - 从 Oracle 迁移到 PostgreSQL 时对 sibling BY 和 rownum 进行 ORDER

sql - Not a Group by expression 错误 [连接表]

sql - 声明变量时PLSQL中的存储过程变量错误

用于运行存储过程的 MySQL 唯一 session