我在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);
如何获得其返回值?
答案 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;
希望这有帮助