2010-01-08 64 views
1

我創建Oracle中的功能如下圖所示:如何從asp.net調用pl/sql函數?

我需要從我的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; 

回答

3

就這樣稱呼它使用Oracle .NET驅動程序存儲過程

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頁面,無論哪種方式。