2010-01-13 205 views
0

我有一個看起來像這樣的Pl/Sql過程簽名C#和PlSql光標

foo(param1 IN type1, param2 IN type1, c OUT REF CURSOR)

這個存儲過程在C#中被調用。在C#代碼中,我用這個遊標填充一個DataTable。我想知道光標什麼時候會關閉。

我應該關閉它在SP?在代碼中?或者當我調用Dispose方法時(因爲它沒有Close方法),OracleRefCursor會關閉它?

感謝

編輯:下面是代碼的一些例子中,我使用

存儲過程:

create or replace procedure foo1(param1 IN type1, param2 IN type1, c OUT REF CURSOR) 
IS 
BEGIN 
    OPEN c 
    FOR 
     SELECT x 
     FROM table; 
END; 

create or replace procedure foo2(param3 IN type1, param4 IN type1, c OUT REF CURSOR) 
IS 
    temp type1 := param3; 
    x type1; 
BEGIN 
    LOOP temp < param4 
     foo1(temp, param4, c); 
     FETCH c INTO x; 
     temp := temp +1; 
    END LOOP; 
END; 

感謝

+0

你有一些使用c#和plsql遊標的例子嗎? 因爲我最近發佈了問題,最近沒有人回答 – tga 2010-01-13 13:48:56

+0

我已經添加了一些代碼 – ALOToverflow 2010-01-13 14:04:21

+0

你能告訴我一些c#樣本嗎?因爲我在用DataReader從Cursor讀取時遇到問題。有很多DataAdapter的例子,但沒有DataReader的例子。提前Thanx。 – tga 2010-01-13 14:10:32

回答

0

你不應該關閉遊標,因爲沒有數據被退回,你必須在你的c#代碼中關閉它。

+0

但是如何?我使用OracleRefCursor對象來存儲遊標,但是在這個對象上沒有這樣的關閉方法。只有一個dipose()。 – ALOToverflow 2010-02-03 13:36:03

+0

查看我的話題有一些關於它的探索 http://stackoverflow.com/questions/2037000/c-and-postgresql – tga 2010-02-03 18:13:21