[英]How to call an Oracle Procedure from C#
From C# Code, I'm trying to call a PACKAGE.PROCEDURE() from Oracle. 从C#代码,我试图从Oracle调用PACKAGE.PROCEDURE()。 In this simple example I should get one value from the procedure call, but all I get is error:
在这个简单的示例中,我应该从过程调用中获得一个值,但是我得到的只是错误:
wrong number or types of arguments in call to 'RETURN_NUM'
调用“ RETURN_NUM”时参数的数量或类型错误
The procedure is declared as follows: 该过程声明如下:
PROCEDURE return_num(xNum OUT NUMBER) AS
BEGIN
xNum:= 50;
dbms_output.put_line('hello world ' || xNum);
END;
C# code: C#代码:
Oraclecon.Open();
OleDbCommand myCMD = new OleDbCommand("TEST.return_num", Oraclecon);
myCMD.CommandType = CommandType.StoredProcedure;
myCMD.Parameters.Add("xNum", OleDbType.Numeric);
OleDbDataReader myReader;
myReader = myCMD.ExecuteReader();
Can some one please point out what I'm doing wrong. 有人可以指出我做错了吗。 Then in a real scenario I would like to call a procedure that returns a set of values from a custom Type, such as:
然后在实际情况下,我想调用一个从自定义Type返回一组值的过程,例如:
TYPE r_interface_data IS RECORD
(
object_id VARCHAR2(16),
obj_type VARCHAR2(32)
);
TYPE t_interfase_data IS TABLE OF r_interface_data;
How can I approach that. 我该如何处理。 Thanks!
谢谢!
UPDATE: In my particular case I ended-up doing the following approach 更新:在我的特定情况下,我最终采用以下方法
using (OleDbCommand cmd = new OleDbCommand("PACKAGE.procedure_name"))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlManager sqlManager = new SqlManager();
return sqlManager.GetDataSet(cmd);
}
I don't think you're that far off... try this: 我不认为您离我们有那么远...试试这个:
OracleCommand cmd = new OracleCommand("return_num", Oraclecon);
cmd.Parameters.Add(new OracleParameter("xNum", OracleDbType.Decimal,
ParameterDirection.Output));
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
OracleDecimal d = (OracleDecimal)cmd.Parameters[0].Value;
double result = d.ToDouble();
result
now contains the out parameter from the procedure. result
现在包含过程中的out参数。
I think your problem is you were attempting to use a DbDataReader
on a stored procedure. 我认为您的问题是您正在尝试在存储过程上使用
DbDataReader
。 DbDataReader
is for queries. DbDataReader
用于查询。
Also, I used ODP.net -- that may or may not have contributed to your issue, that you were using Ole. 另外,我使用了ODP.net-您使用Ole可能会或可能不会导致您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.