简体   繁体   English

Oracle存储过程无法从ASP.NET调用

[英]Oracle Stored Procedure unable to call from ASP.NET

I have written a code in ASP.NET to fetch data from Oracle stored procedure. 我已经在ASP.NET中编写了一个代码来从Oracle存储过程中获取数据。 But I get an error when trying to fetch the data: 但是尝试获取数据时出现错误:

ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'USER_FEEDBACK' ORA-06550: line 1, column 7: PL/SQL: Statement ignored ORA-06550:第1行,第7列:PLS-00306:调用“ USER_FEEDBACK”时参数的数量或类型错误ORA-06550:第1行,第7列:PL / SQL:语句被忽略

Procedure code is this: 程序代码是这样的:

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 ;

This is my ASP.NET code: 这是我的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();

Please suggest how to make it work. 请提出如何使其工作的建议。

You're only creating/adding a single parameter but assigning it twice with different values resulting in just one parameter to the call. 您仅创建/添加一个参数,但是两次将其分配不同的值,从而导致仅一个参数出现在调用中。

Instead, create and add two separate parameters, something like; 相反,创建并添加两个单独的参数,例如:

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);

It's probably because you don't Add the first parameter. 可能是因为您没有Add第一个参数。 Try something like this? 尝试这样的事情?

...
oraP.ParameterName = "cv_results";
oraP.Direction = System.Data.ParameterDirection.Output;
objCmd.Parameters.Add(oraP);

oraP = new Oracle.DataAccess.Client.OracleParameter();
oraP.ParameterName = "start_date";
...

Though, it'd be better to declare another variable for the first param if you'll be reading from that refcursor later. 不过,最好是在第一个参数中声明另一个变量,如果您以后要从该refcursor中读取该变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM