如何将布尔参数传递给 Oracle 过程 C#

本文关键字:Oracle 过程 参数传递 布尔 | 更新日期: 2023-09-27 18:37:22

我在将布尔参数传递给我在 Oracle 中的过程时遇到问题。我收到错误

ORA-06550: line 1, column 7:
  PLS-00306: wrong number or types of arguments in call to 'LOG_ENTRY'
ORA-06550: line 1, column 7:
  PL/SQL: Statement ignored"

甲骨文中的过程:

log_entry(p_rqserial in integer,
          p_orig in varchar,
          p_type in char,
          p_objname in varchar,
          p_info in varchar,
          p_text in varchar, p_with_commit boolean)

这是我的代码:

    cmd = new Oracle.DataAccess.Client.OracleCommand("Vbank_pkg.vb_log_entry", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("p_rqserial", OracleDbType.Int32).Value = Log_Serial;
    cmd.Parameters.Add("p_orig", OracleDbType.Varchar2).Value = "''" + p_orig + "''";
    cmd.Parameters.Add("p_type", OracleDbType.Char).Value = "''" + p_type + "''";
    cmd.Parameters.Add("p_objname", OracleDbType.Varchar2).Value = "''" + p_objname + "''";
    cmd.Parameters.Add("p_info", OracleDbType.Varchar2).Value = "''" + p_info + "''";
    cmd.Parameters.Add("p_text", OracleDbType.Varchar2).Value = "''" + p_text + "''";
    cmd.Parameters.Add("p_with_commit", OracleDbType.Char).Value =true;
    cmd.ExecuteNonQuery();//Here error

有人知道如何做到这一点吗?因为我找不到任何解决方案,很多人说不可能将布尔参数从 C# 传递到 Oracle,但我不敢相信没有办法。

如何将布尔参数传递给 Oracle 过程 C#

尝试使用 OracleCommand 属性BindByName作为true来强制数据提供程序按名称绑定这些参数,而不仅仅是索引。无需将'作为参数传递。它以ado.net中的参数为首。

ODP.NET 不支持布尔数据类型。只需使用 10 作为char值即可持久保存它。

对于示例:

cmd = new Oracle.DataAccess.Client.OracleCommand("Vbank_pkg.vb_log_entry", con);
cmd.BindByName = true;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_rqserial", OracleDbType.Int32).Value = Log_Serial;
cmd.Parameters.Add("p_orig", OracleDbType.Varchar2).Value = p_orig;
cmd.Parameters.Add("p_type", OracleDbType.Char).Value = p_type;
cmd.Parameters.Add("p_objname", OracleDbType.Varchar2).Value = p_objname;
cmd.Parameters.Add("p_info", OracleDbType.Varchar2).Value = p_info;
cmd.Parameters.Add("p_text", OracleDbType.Varchar2).Value = p_text;
cmd.Parameters.Add("p_with_commit", OracleDbType.Char).Value = "1";
cmd.ExecuteNonQuery();

请考虑以下过程作为示例

CREATE OR REPLACE PROCEDURE my_procedure
(
   condition NUMBER,...

在 C# 中,添加参数

cmd.Parameters.Add("@condition", OracleDbType.Char).Value = myObject.isCondition ? 1 : 0;