如何将布尔参数传递给Oracle过程C#
我有问题将布尔参数传递给我在Oracle中的过程。我得到错误如何将布尔参数传递给Oracle过程C#
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#传递bool参数到Oracle是不可能的,但我不相信没有办法。
尝试使用BindByName
OracleCommand
的属性作为true
强制数据提供程序按名称绑定这些参数,而不仅仅是索引。您不需要通过'
作为参数。它的参数为ado.net
。
ODP.NET不支持布尔数据类型。只需使用1
或0
作为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();
我都准备好了,这是不行的。经过这段时间,我要求改变Oracle中的函数,并将参数改为0-false和1-true,这会更快:) –
但我仍然很高兴找到另一种解决方案。 –
是的,我同意你的意见,但不幸的是,ODP.NET不支持bool类型,所以你必须使用1或0. –
删除引号,这就是使用准备好的语句和绑定参数的主要好处之一。 –