2010-01-13 139 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