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!

Oracle DataAccess 4.112.3.0 and 4.122.18.3 compatibility issues

4291000Aug 22 2020 — edited Sep 9 2020

Has anyone used Oracle UDTs with Visual Studio 2017, I'm finding the older 11g client works whilst the newer 18c client fails to populate my record collections

I built a solution using Oracle AQ using Visual Studio 2017 .Net targetting 4.7.2 - x86 project build due to age of some of the dlls - Oracle 12c database version 12.1.0.2.0

I used the Microsoft Create Custom class wizard to create the classes for the Oracle UDT.

The Class consists of a data set of 4 arrays, 2x  numeric, string and timestamp information.

The application successfully receives an Oracle AQ message (sent by a PLSQL package) which is then decoded and passes the required data via the record of arrays back to the Oracle query.

This works perfectly with the older 11.2 client (Oracle DataAccess dll 4.112.3) but rebuilding or running the project (using a binding redirect) to use the 18.3 client (Oracle DataAccess 4.122.18) does not work properly and I can get an error ORA-06531: Reference to uninitialized collection. I get this error when requesting larger data sets ie > 1 or 2 records . Small 1 or 2 record datasets are returned correctly

The project when built using the older 4.112.3 dll returns all data requests without any issue for small or very large data sets

Both the oracle client versions has been registered on the server.

Checking the returned data I see that the timestamp array is not being populated. Single stepping the application I can see that the AQ messages are identical going in to the call (m_AQTx_Queue.Enqueue(_message);)  where _message is an object of type OracleAQMessage regardless of the Oracle DataAccess .dll but being passed back to the oracle database is a different matter. With the later DLL failing to populate the timestamp array. I've tried various directives but to no avail. It does not matter whether the application is run on the development server which has both client versions or another server with just the later client installed in all cases the later client does not work correctly

Given that just changing the oracle client version causes the issue, then either I have some incompatibility somewhere or maybe a size restriction, can't be mapping otherwise small data sets would not work either.

Have tried searching for suggestions but this is a very odd issue and nothing found.

Anyone out there with ideas, didn't want to install the older oracle client just to get this to work.

Thanks

John

Comments
Post Details
Added on Aug 22 2020
6 comments
8,173 views