我有问题将布尔参数传递给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
有人知道怎么做吗?因为我无法找到任何解决方案,很多人都认为将boo参数从C#传递到Oracle是不可能的,但我无法相信没有办法。
答案 0 :(得分:1)
尝试使用BindByName
的{{1}}属性作为OracleCommand
来强制数据提供者按名称绑定这些参数,而不仅仅是索引。您无需将true
作为参数传递。它是'
中的参数。
ODP.NET不支持布尔数据类型。只需使用ado.net
或1
作为0
值即可保留它。
样品:
char
答案 1 :(得分:-1)
以以下步骤为例
CREATE OR REPLACE PROCEDURE my_procedure
(
condition NUMBER,...
在C#中,添加参数
cmd.Parameters.Add("@condition", OracleDbType.Char).Value = myObject.isCondition ? 1 : 0;