如何获取存储过程返回值?

时间:2009-11-03 07:43:35

标签: asp.net oracle stored-procedures plsql

我在oracle中创建了存储过程 我通过我的asp.net代码调用它 程序是:

 PROCEDURE prc_GetNewQuestionNo(iNextQuestionNo IN OUT NUMBER)
 IS
    iQuestionNo NUMBER ;

 BEGIN
     Select MAX(QUESTIONNO)+ 1 INTO iQuestionNo
     from tblIFFCOQUESTIONMASTER;
     iNextQuestionNo:=iQuestionNo;
 END prc_GetNewQuestionNo;

我在asp.net中调用它:

<Connection>
  com.CommandType = CommandType.StoredProcedure;
                com.CommandText = StoredProcedures.GET_NEW_QUESTION_NO;
                com.Parameters.Add(new OracleParameter("iNextQuestionNo", OracleType.Number)).Direction = ParameterDirection.InputOutput;

                adp = new OracleDataAdapter(com);
                ds = new DataSet();
                adp.Fill(ds);

如何获得其返回值?

3 个答案:

答案 0 :(得分:1)

使用功能不是更好吗?就像:

create function prc_GetNewQuestionNo(iNextQuestionNo IN NUMBER)
return number AS
    iQuestionNo NUMBER ;
BEGIN
    Select MAX(QUESTIONNO)+ 1 INTO iQuestionNo from tblIFFCOQUESTIONMASTER;
    return iQuestionNo;
END prc_GetNewQuestionNo;

答案 1 :(得分:1)

我想在保罗的回复中添加评论/问题,但我不能。为我的无知道歉,但是如果你使用的是一个存储过程与隔离级别可序列化的SQL Server,并不认为所有的sql表在事务/存储过程持续的时候被锁定,不会产生并发问题?这是一种不好的做法吗?

答案 2 :(得分:0)

我猜问题就在这里

                adp = new OracleDataAdapter(com);
                ds = new DataSet();
                adp.Fill(ds);

你想要标量值而不是整个记录集..对吗?所以请尝试这样

//一些代码段

db.ExecuteNonQuery(cmd);               
iNextQuestionNo= (decimal?)cmd.Parameters[0].Value;

希望这有帮助