Oracle存储过程无法从ASP.NET调用
我在ASP.NET中编写了一段代码,用于从Oracle存储过程中获取数据。但我在尝试获取数据时出错: ORA-06550:第1行第7列:PLS-00306:调用“用户反馈”时参数的数量或类型错误ORA-06550:第1行第7列:PL/SQL:语句被忽略 程序代码如下:Oracle存储过程无法从ASP.NET调用,asp.net,oracle,ado.net,Asp.net,Oracle,Ado.net,我在ASP.NET中编写了一段代码,用于从Oracle存储过程中获取数据。但我在尝试获取数据时出错: ORA-06550:第1行第7列:PLS-00306:调用“用户反馈”时参数的数量或类型错误ORA-06550:第1行第7列:PL/SQL:语句被忽略 程序代码如下: create or replace PROCEDURE user_feedback(cv_results out sys_refcursor,start_date IN VARCHAR2) IS BEGIN open cv_re
create or replace PROCEDURE user_feedback(cv_results out sys_refcursor,start_date IN VARCHAR2)
IS
BEGIN
open cv_results for
select pi.first_name || ' ' || pi.last_name initiator
......
from request_workflow w inner join request_workflow_attribute waRating
on waRating.request_workflow_id = w.row_id
and waRating.attr_name = 'UserRating'
.............
where w.date_stamp_utc between start_date and '31-dec-2015'
order by waRating.attr_value desc, eform_name;
END ;
这是我的ASP.NET代码:
Oracle.DataAccess.Client.OracleCommand objCmd = new Oracle.DataAccess.Client.OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "user_feedback";
objCmd.CommandType = CommandType.StoredProcedure;
Oracle.DataAccess.Client.OracleParameter oraP = new Oracle.DataAccess.Client.OracleParameter();
// System.Data.OracleClient.OracleParameter op = null;
oraP.OracleDbType = OracleDbType.RefCursor;
oraP.ParameterName = "cv_results";
oraP.Direction = System.Data.ParameterDirection.Output;
oraP.ParameterName = "start_date";
oraP.OracleDbType = OracleDbType.Varchar2;
oraP.Value = "01-Dec-2015";
oraP.Direction = System.Data.ParameterDirection.Input;
objCmd.Parameters.Add(oraP);
objConn.Open();
objCmd.ExecuteReader();
objCmd.ExecuteNonQuery();
请建议如何使其工作。这可能是因为您没有添加第一个参数。试试这样的
...
oraP.ParameterName = "cv_results";
oraP.Direction = System.Data.ParameterDirection.Output;
objCmd.Parameters.Add(oraP);
oraP = new Oracle.DataAccess.Client.OracleParameter();
oraP.ParameterName = "start_date";
...
不过,如果以后要从引用游标读取,最好为第一个参数声明另一个变量。您只创建/添加了一个参数,但使用不同的值分配了它两次,结果只为调用指定了一个参数 相反,创建并添加两个单独的参数,如
var oraP1 = new Oracle.DataAccess.Client.OracleParameter();
oraP1.OracleDbType = OracleDbType.RefCursor;
oraP1.ParameterName = "cv_results";
oraP1.Direction = System.Data.ParameterDirection.Output;
objCmd.Parameters.Add(oraP1);
var oraP2 = new Oracle.DataAccess.Client.OracleParameter();
oraP2.ParameterName = "start_date";
oraP2.OracleDbType = OracleDbType.Varchar2;
oraP2.Value = "01-Dec-2015";
oraP2.Direction = System.Data.ParameterDirection.Input;
objCmd.Parameters.Add(oraP2);
当添加第一个参数时。然后我得到一个错误:-OracleParameter对象已包含在集合中。是否添加了
oraP=new Oracle.DataAccess.Client.OracleParameter()代码>行吗?您需要创建两个参数对象,并将它们同时添加。