Hello all.
The application that I am working on has a Oracle DB 10g and we want to migrate the DB to 11g (11.2.0.2). The client OS is a Windows 7 x64 and the application (which is an x86 app) is a hybrid between .NET and C++(COM components). The .NET part is using ODP.NET components and the C++ part is using ODBC drivers (oraclient 11.2.0.1 - x86 version).
The problem is that the application works without any problems with the 10g DB but when switching to 11g we get an exception. Basically, we have a try { call COM component } catch(Ex ex) {...} and the Exception ex is a AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. I debugged the C++ part and this strange thing happens: the component opens the connection (using a connection string like this : "driver={Oracle in OraClient}; uid=... pwd=.. "), executes some queries, and on one query (which is the same as the last ones - just some selects), when the data is processed (by data I mean a integer ID), the exception is thrown in .NET code. I was able to enter in afxdb.cpp and it looks like the exception is thrown when
GetData method is called. I looked over the ID's from previous queries and the data passed to GetData method is about the same (I mean the fieldtype, index, len, SQL type).
As solutions I tried:
-set "Statement Cache Purge=true" => same effect
- install a instantclient11_2 basic and ODBC drivers (for 11.2.0.2) but I could not connect to the DB (I could find the new drivers in registry WoW64Node/ODBC Drivers, put the location in PATH in front of the other OraClient and replace the OraClient with the name in registry in conn string) => Specified driver could not be loaded due to system error 127.
- tried to see the Marshal.GetLastWin32Error() => returns 0.
Any ideas? :D
Edited by: 917334 on Feb 27, 2012 12:57 PM