如何从asp.net调用pl / sql函数?

时间:2010-01-08 18:03:24

标签: asp.net plsql

我在oracle中创建了一个函数,如下所示:

我需要从我的asp.net页面调用它... 我怎么能这样做?

 create or replace function fun_GeneratePaper(strDisciplineId IN CHAR,
  iNoOfQuestions IN integer)
  return sys_refcursor as
  r1 sys_refcursor;
  begin open r1 for select getguid() tmp,
   QuestionNo,QuestionText,
   Option1,Option2,
   Option3,Option4,
   Correctanswer,Disciplineid
   from tbliffcoQuestionmaster
   where DisciplineId=strDisciplineId
   AND  rownum <= iNoOfQuestions ;
  return(r1);
  end;

2 个答案:

答案 0 :(得分:3)

使用Oracle .net驱动程序将其称为存储过程

答案 1 :(得分:1)

这样的事情可以让你走上正轨:

OracleConnection connection = null;
OracleCommand command = null;
OracleDataReader reader = null;
OracleTransaction transaction = null; 

try
{
    connection = new OracleConnection(connectionString);;
    command = new OracleCommand();
    command.Connection = connection;
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "fun_GeneratePaper"; // May need to qualify with SCHEMA.fun_GeneratePaper

    command.Parameters.Add("strDisciplineId", OracleType.Char);
    command.Parameters["strDisciplineId"].Value = disciplineId;

    command.Parameters.Add("iNoOfQuestions", OracleType.Int32);
    command.Parameters["iNoOfQuestions"].Value = numberOfQuestions; 

    command.Parameters.Add("sys_refcursor", OracleType.Cursor);
    command.Parameters["sys_refcursor"].Direction = ParameterDirection.Output;

    connection.Open();
    transaction = connection.BeginTransaction();
    command.Transaction = transaction;
    reader = command.ExecuteReader();

    while(reader.Read())
    {
        // Do work
    }

    transaction.Commit();

}
catch(Exception e)
{
    if (transaction != null)
    {
        transaction.Rollback();
    }

    // Handle it
}
finally
{
    if (connection != null)
    {
        connection.Close();
    }
}

注意:这种代码可能不属于您的ASP.NET页面。