Page 1 of 1

CURSORS ?????

Posted: Tue 23 Aug 2005 21:51
by expas
i already post this bug (you fix blob and number but what about cursors?)

we test last version and find that CURSORS DONT CLOSE!!!!!!!!!!!!

SQL code:

Code: Select all

create or replace package mypkg
is
type refCur is ref cursor;
end mypkg;

create or replace procedure test_close_of_cursor
(
cur out mypkg.refCur
)
is
begin
	open cur for
		select * from dual;
end test_close_of_cursor;
C# code:

Code: Select all

//закрытие курсоров
for (int i=0; i<1000; i++)
{
using(OracleCommand cmd = new OracleCommand("test_close_of_cursor", (OracleConnection)_cnn))
{
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p = new OracleParameter("cur", OracleDbType.Cursor);
p.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p);
using (OracleDataReader reader = cmd.ExecuteReader())
{
}
}
}
it generate error ORA-01000 and ORA-06512

pls, answer, do you plan to fix this? or may be need to write some specific code to close corsor?

Posted: Thu 25 Aug 2005 00:53
by expas
if add call GC.Collect() - cursor close (but it slowing code)

so in destructor you close cursor, but dont close it in Dispose

Posted: Mon 29 Aug 2005 08:34
by Paul
OraDirect .NET does not know where you want to use returned Cursor parameter.
You must call ((OracleCursor)p.OracleValue).Dispose(); in your code.

Posted: Wed 07 Sep 2005 23:25
by expas
thx