如何将布尔参数传递给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是不可能的,但我不相信没有办法。

+0

删除引号,这就是使用准备好的语句和绑定参数的主要好处之一。 –

尝试使用BindByNameOracleCommand的属性作为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(); 
+1

我都准备好了,这是不行的。经过这段时间,我要求改变Oracle中的函数,并将参数改为0-false和1-true,这会更快:) –

+0

但我仍然很高兴找到另一种解决方案。 –

+0

是的,我同意你的意见,但不幸的是,ODP.NET不支持bool类型,所以你必须使用1或0. –