c#调用oracle存储过程,返回2个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#调用oracle存储过程,返回2个值相关的知识,希望对你有一定的参考价值。

存储过程名称:drv_admin.write_KM3

参数说明
M_LSH 流水号 input
M_SFZMHM 身份证号码 input
M_KSCX 考试车型 input
M_KSRQ 考试日期(YYYY-MM-DD ) input
M_KSCJ 考试成绩 不合格0 合格为具体分数 input
M_KSCS 考试次数 input
M_KSY1 考试员1 input
M_KSY2 考试员2 input
M_JBR 经办人 input
M_ZT 状态1合格 2不合格 0未考 input
M_SN 调用存储过程SN input
RES 存储过程执行成功标记 0成功,1失败 output 输出参数
ERR 错误说明 output 输出参数

这个存储过程要怎么调用啊。。。。他要返回2个参数。
我的存储过程是已经存在的了。就是不知道要怎么调用。。。怎么去接受他2个返回的值

outresult = new ArrayList() ;
result = new ArrayList();
cmd = new OracleCommand();
cmd.CommandType = CommandType.StoredProcedure;
//将输出参数添加到result对象中
foreach(OracleParameter op in OPCParam)

if(ParameterDirection.Output == op.Direction)

result.Add(op);

cmd.Parameters.Add(op);

cmd.CommandText = ProcedureName;
cmd.ExecuteNonQuery();
for(int i = 0; i < result.Count; i ++)

outresult.Add(((OracleParameter)result[i]).Value);


//返回值在outresult对象中
参考技术A 是这样的
首先语句要这样
declare @Res bit,@Err navarchar(200)
exec 存储过程名 ..参数..,@Res,@Err
select @Res Result,@Err ErrorMsg
以上就是所有的sql了
用一个数据集存返回值,然后数据集访问字段"Result","ErrorMsg"
就可以得到你要的东东了
参考技术B OleDbConnection PubsConn = new OleDbConnection
("Provider=SQLOLEDB;Data Source=server;" +
"integrated Security=sspi;initial catalog=pubs;");
OleDbCommand testCMD = new OleDbCommand
("TestProcedure", PubsConn);

testCMD.CommandType = CommandType.StoredProcedure;

OleDbParameter RetVal = testCMD.Parameters.Add
("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;
OleDbParameter IdIn = testCMD.Parameters.Add
("@au_idIN", OleDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
OleDbParameter NumTitles = testCMD.Parameters.Add
("@numtitlesout", OleDbType.VarChar, 11);
NumTitles.Direction = ParameterDirection.Output;

IdIn.Value = "213-46-8915";

PubsConn.Open();

OleDbDataReader myReader = testCMD.ExecuteReader();
Console.WriteLine ("Book Titles for this Author:");
while (myReader.Read())

Console.WriteLine ("0", myReader.GetString (2));
;
myReader.Close() ;
你看看我的语法就明白了。。。
using system.ole...要加上去啊哈
参考技术C 不是有2个输出型参数嘛

定义两个变量,用来接受这2个输出参数传出的值

C# 获取 oracle 存储过程的 返回值

存储过程
CREATE OR REPLACE PROCEDURE ADMIN.INSERT_OBJ (
   OBJEFIRT_parms      IN     NVARCHAR2,
   OBJEDATT_parms      IN     NVARCHAR2,
   OBJESECT_parms      IN     NVARCHAR2,
   OBJECONTENT_parms   IN     NVARCHAR2,
   ISRELEASE_parms     IN     INTEGER,
   OBJECODE_parms      IN     NVARCHAR2,
   TAGS_parms          IN     NVARCHAR2,
   OBJ_ID_parms           OUT INTEGER
)
IS
BEGIN
   INSERT INTO ADMIN.CB_OBJECT (OBJEID,
                                OBJEFIRT,
                                OBJEDATT,
                                OBJESECT,
                                OBJECONTENT,
                                ISRELEASE,
                                OBJECODE,
                                TAGS)
     VALUES   (ADMIN.CYANBIRD.NEXTVAL,
               OBJEFIRT_parms,
               TO_DATE (OBJEDATT_parms, YYYY-MM-DD hh24:mi:ss),
               OBJESECT_parms,
               OBJECONTENT_parms,
               ISRELEASE_parms,
               OBJECODE_parms,
               TAGS_parms)
     RETURN   OBJEID     INTO   OBJ_ID_parms;

   RETURN;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      NULL;
   WHEN OTHERS
   THEN
      -- Consider logging the error and then re-raise
      RAISE;
END INSERT_OBJ;
C#中获取值

                DbParameter[] paras = new OracleParameter[8];
                paras[0] = new OracleParameter("OBJEFIRT_parms", OracleType.NVarChar);
                paras[0].Value = cbinf.ObjeFirT;
                paras[1] = new OracleParameter("OBJEDATT_parms", OracleType.NVarChar);
                paras[1].Value=cbinf.ObjeDatT.ToString();
                paras[2]= new OracleParameter("OBJESECT_parms",OracleType.NVarChar);
                paras[2].Value = cbinf.ObjeSecT;
                paras[3] = new OracleParameter("OBJECONTENT_parms", OracleType.NVarChar);
                paras[3].Value = cbinf.ObjeContent;
                paras[4] = new OracleParameter("ISRELEASE_parms", OracleType.Int32);
                paras[4].Value = cbinf.IsRelease;
                paras[5] = new OracleParameter("OBJECODE_parms", OracleType.NVarChar);
                paras[5].Value = cbinf.ObjeCode;
                paras[6] = new OracleParameter("TAGS_parms", OracleType.NVarChar);
                paras[6].Value = cbinf.Tags;
                paras[7] = new OracleParameter("OBJ_ID_parms", OracleType.Int32);
                paras[7].Direction = ParameterDirection.Output;
                SQLHelper.ExecuteScaler(InsertInfo_Obj, CommandType.StoredProcedure, paras);
                int i=Convert.ToInt32(paras[7].Value);
                return i;



以上是关于c#调用oracle存储过程,返回2个值的主要内容,如果未能解决你的问题,请参考以下文章

C#调用Oracle带输出数据集的存储过程

执行 C#的服务器端程序调用Oracle的存储过程报错

C# 获取 oracle 存储过程的 返回值

c# 调用Oracle存储过程 PLS-00201:必须声明标识符

从 C# 调用 Oracle 存储过程?

在c#中调用oracle存储过程