Skip to Main Content

ODP.NET

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

ODP12 on Mono - works, but I get a "Invalid operation on a closed object"

adi999Oct 4 2013

Hi, I've got my application running under Mono 3.2.3 on CentOS using the ODP 12 managed provider. There were a few hurdles to overcome, but I got there in the end. Not having to install an Oracle client is a big plus to me, also a single dll for 64 and 32bit saves a headache too.


However, I did come across a strange problem. When I try to fill a data set using the OracleDataReader I get a "Invalid operation on a closed object" exception. Strange thing is, if I catch the errror and handle it (ignore it), the data set is populated, the connection is still open and my application works perfectly? Has anyone else seen this behavior and is there a way of working around it? I have tried the same code on windows using MS framework 4.5 and it works fine.


Here's my stack trace.

System.InvalidOperationException: Invalid operation on a closed object

  at Oracle.ManagedDataAccess.Client.OracleDataReader.get_SchemaTables () [0x00000] in <filename unknown>:0

  at (wrapper remoting-invoke-with-check) Oracle.ManagedDataAccess.Client.OracleDataReader:get_SchemaTables ()

  at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill (System.Data.DataSet dataSet, System.String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) [0x00000] in <filename unknown>:0

  at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill (System.Data.DataSet dataSet, Int32 startRecord, Int32 maxRecords, System.String srcTable, IDbCommand command, CommandBehavior behavior) [0x00000] in <filename unknown>:0

  at System.Data.Common.DbDataAdapter.Fill (System.Data.DataSet dataSet) [0x00000] in <filename unknown>:0

  at oratest.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidOperationException: Invalid operation on a closed object

I managed to replicate the error in a stand alone console app (apologies if the format goes wrong).

static void Main(string[] args)

{

    string conX = "User ID=MY_USER_SCHEMA;Password=password;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.?.?)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))";

    using (OracleConnection con = new OracleConnection(conX))

    {

        con.Open();

        using (OracleCommand com = con.CreateCommand())

        {

            com.CommandText = "SELECT * FROM MyTable";

            com.CommandType = System.Data.CommandType.Text;

            var da = new OracleDataAdapter(com);

            DataSet ds = new DataSet();

            da.Fill(ds);

            Console.WriteLine(string.Format("Found {0} lines", ds.Tables[0].Rows.Count));

            Console.ReadKey();

        }    

    }

}

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 1 2013
Added on Oct 4 2013
0 comments
3,678 views