用于在DB中调用具有用户定义值的Oracle存储过程输出参数的C#实现 [英] C# implementation for calling an Oracle stored procedure output parameter with user defined value in DB

查看:98
本文介绍了用于在DB中调用具有用户定义值的Oracle存储过程输出参数的C#实现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用下面的oracle SP并尝试在C#代码中调用此SP,但是在调用中接收到错误数量或类型的参数。如何在C#代码中调用此过程。请参阅下面我正在使用的C#代码。



PROCEDURE UPDATE_KeyValue(

PAR_ID in VARCHAR2,

PAR_STATUS OUT VARCHAR2)



BEGIN

-

PAR_STATUS:='OK';

-

UPDATE TableName SET Key ='Y'

WHERE ID = PAR_ID

-

COMMIT;

-

END UPDATE_KeyValue;



C#代码:



cmd.CommandText =UPDATE_KeyValue;

cmd.CommandType = CommandType.StoredProcedure;



OracleParameter PAR_ID1 = new OracleParameter();

PAR_ID1.ParameterName =PAR_ID;

PAR_ID1.OracleDbType = OracleDbType.Varchar2;

PAR_ID1.Direction = System.Data.ParameterDirection.Input;

PAR_ID1.Value = 131;

cmd.Parameters.Add(PAR_ID1);



OracleParameter PAR_STATUS1 =新的OracleParameter();

PAR_STATUS1.ParameterNa me =PAR_STATUS;

PAR_STATUS1.OracleDbType = OracleDbType.Varchar2;

PAR_STATUS1.Direction = ParameterDirection.Output;

cmd.Parameters。添加(PAR_STATUS1);



cmd.ExecuteNonQuery();

I am using the oracle SP below and trying to call this SP in C# code behind but receiving an exception "wrong number or types of arguments in call" .How we can call this procedure in C# code. Please see the C# code below which I am currently using.

PROCEDURE UPDATE_KeyValue(
PAR_ID IN VARCHAR2,
PAR_STATUS OUT VARCHAR2 )
IS
BEGIN
--
PAR_STATUS := 'OK';
--
UPDATE TableName SET Key = 'Y'
WHERE ID= PAR_ID
--
COMMIT;
--
END UPDATE_KeyValue;

C# Code:

cmd.CommandText = "UPDATE_KeyValue";
cmd.CommandType = CommandType.StoredProcedure;

OracleParameter PAR_ID1 = new OracleParameter();
PAR_ID1.ParameterName = "PAR_ID ";
PAR_ID1.OracleDbType = OracleDbType.Varchar2;
PAR_ID1.Direction = System.Data.ParameterDirection.Input;
PAR_ID1.Value = 131;
cmd.Parameters.Add(PAR_ID1);

OracleParameter PAR_STATUS1 = new OracleParameter();
PAR_STATUS1.ParameterName = "PAR_STATUS";
PAR_STATUS1.OracleDbType = OracleDbType.Varchar2;
PAR_STATUS1.Direction = ParameterDirection.Output;
cmd.Parameters.Add(PAR_STATUS1);

cmd.ExecuteNonQuery();

推荐答案

我更改了命令对象名称到cmd1,因为我使用cmd作为上一个命令,我也添加了参数大小PAR_STATUS1.Size = 8000;输出参数,这解决了我的问题。



谢谢。
I changed the command object name to cmd1 as I used cmd for the previous command also I added parameter size PAR_STATUS1.Size = 8000; for the output parameter and that solved my issue.

Thanks.


这篇关于用于在DB中调用具有用户定义值的Oracle存储过程输出参数的C#实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆