用于在DB中调用具有用户定义值的Oracle存储过程输出参数的C#实现 [英] C# implementation for calling an Oracle stored procedure output parameter with user defined value in DB
问题描述
我正在使用下面的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屋!