AccessViolationException with SDO polygons

AccessViolationException with SDO polygons

Postby woehling » Thu 21 Jul 2011 16:19

Hi,

I get an System.AccessViolationException when using the OracleObject data type. I'm working with SDO_GEOMETRY objects, the column contains POLYGON geometries or NULL.

I tried this out on Vista x86 and Win7 x64, with dotConnect Express (latest version, v6.30.185 and also older versions from 2011), Oracle Client 11.2.0.1 32bit, Oracle Server 11.1.0.6 64bit). Target platform is .NET 4 (x86), but the problem also exists in .NET 2.

I first thought it would be a .NET 4 problem, because older versions of our product are working fine. But then I tried dotConnect Express v5.25.49.0: With this version everything works fine!
So there is definitely a problem in your code. I also tried out ODP.NET: no problems at all.

This is the StackTrace:
OciDynamicType.nativeOCIObjectFree(HandleRef , HandleRef , HandleRef , In
t16 )
OciDynamicType.OCIObjectFree(HandleRef , HandleRef , HandleRef , Int16 )
Devart.Data.Oracle.h.a(IntPtr A_0)
Devart.Data.Oracle.ab.l()
Devart.Data.Oracle.ab.c(Int32 A_0)
Devart.Data.Oracle.ab.b(Int32 A_0)
Devart.Data.Oracle.OracleDataReader.Read()

I was not able to reproduce the behavior with newly created data, but this is a small piece of code that throws the exception (but only with my data):
Code: Select all
    var sql = "select GEOMETRY from ...";
    var reader = ...;
    while(reader.Read())
    //Read() throws at same position every time. Slightly changing the sql statement slightly changes the position too...
    {
        object sdo = reader[0];
    }

I managed to work around the problem, because I changed the sql statement to:
var sql = "select CASE WHEN GEOMETRY IS NULL THEN SDO_UTIL.FROM_WKTGEOMETRY('POINT (0 0)') ELSE GEOMETRY END from ...";

With this statement also no exception:
var sql = "select GEOMETRY from ... where NOT GEOMETRY IS NULL";

So I assume that there is a memory management problem in the dotConnect provider. The last sdo object seemed to be corrupt, because the debugger showed "a mess" sometimes when I "looked into" the sdo object.
So the NULL values seem to be the cause for this problem.
Note: The GEOMETRY column is often NULL because the table is LEFT JOINed (so no matching record exists in the GEOMETRY column's table)

Hope you can fix this!

Regards,
Markus
woehling
 
Posts: 5
Joined: Sun 26 Jul 2009 16:23

Postby Shalex » Mon 25 Jul 2011 10:08

Could you please send us a small test project with the DDL/DML script (with your data)? We cannot reproduce the problem with the following code in our environment using dotConnect for Oracle v 6.30.185:
Code: Select all
DDL/DML:
CREATE TABLE cola_markets (
  mkt_id NUMBER PRIMARY KEY,
  name VARCHAR2(32),
  shape SDO_GEOMETRY);
INSERT INTO cola_markets VALUES(
  1,
  'cola_a',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
    SDO_ORDINATE_ARRAY(1,1, 5,7)
  )
);
INSERT INTO cola_markets VALUES(
  2,
  'cola_b',
  null
);

C#:
    var sql = "select shape from cola_markets";
    using (OracleConnection conn = new OracleConnection()){
        conn.ConnectionString = "server=orcl1120;uid=***;pwd=***;";
        conn.Open();
        OracleCommand cmd = conn.CreateCommand();
        cmd.CommandText = sql;
        var reader = cmd.ExecuteReader();
        while(reader.Read()){
            object sdo = reader[0];
        }
    }
Shalex
Devart Team
 
Posts: 7780
Joined: Thu 14 Aug 2008 12:44

Postby Shalex » Wed 27 Jul 2011 16:00

Please try changing the value of OracleCommand.FetchSize property in your code to solve the issue.
We will investigate the difference in behaviour of dotConnect for Oracle v 5.25.49 and 6.30.185.
Shalex
Devart Team
 
Posts: 7780
Joined: Thu 14 Aug 2008 12:44

Postby Shalex » Thu 29 Sep 2011 15:00

The bug with reading Oracle Objects via OracleDataReader is fixed. We will post here when the corresponding build of dotConnect for Oracle is available for download.
Shalex
Devart Team
 
Posts: 7780
Joined: Thu 14 Aug 2008 12:44

Postby Shalex » Tue 25 Oct 2011 08:34

New build of dotConnect for Oracle 6.50.237 is available for download now!
It can be downloaded from http://www.devart.com/dotconnect/oracle/download.html (trial version) or from Registered Users' Area (for users with valid subscription only). It includes the mentioned fix.
For more information, please refer to http://www.devart.com/forums/viewtopic.php?t=22379 .
Shalex
Devart Team
 
Posts: 7780
Joined: Thu 14 Aug 2008 12:44


Return to dotConnect for Oracle