繁体   English   中英

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

[英]How to pass boolean parameter to Oracle procedure C#

我在将布尔参数传递给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"

Oracle中的过程:

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

有什么知道怎么做吗? 因为我找不到任何解决方案,所以很多人说不可能将bool参数从C#传递给Oracle,但是我不相信没有办法。

尝试将OracleCommand BindByName属性设置为true以强制数据提供程序按名称(而不只是索引)绑定这些参数。 您无需传递'作为参数。 它是ado.net带有参数的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM