我有问题将布尔参数传递给我在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中参数的主角.
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();