Reading a VARRAY causes an exception

Discussion of open issues, suggestions and bugs regarding ADO.NET provider for Oracle
Post Reply

Reading a VARRAY causes an exception

Post by chaosworrier » Sat 20 Nov 2004 13:56

I am using V2.40 of OraDirect .NET.

I have some code which reads rows from a table where some of the columns are embedded VARRAY(3) OF NUMBER.

Things all work fine until I read in a row where one of these numbers in the VARRAY is


Then I get:


Specified argument was out of the range of valid values.

I get a similar erorr if I do some (more convoluted) code in Oracle's ODP.Net to read in the value.

What gives? I know that numbers close to zero sometimes get slightly altered to to the inaccurate way of storing decimals in binary representation, but I figured that being a generic number would prevent this issue.

I had this issue near the beginning of the year and was informed by Core Labs that there would be a solution in the next release.

Well, I moved on to other projects so left it alone until now; there has been at least one release of OraDirect .NET since then but the issue does not seem resolved...

Any ideas on a work-around or solution? I cannot really change the underlying data in the Oracle database as it is derived from a source which is oiut of my control.

Thanks in advance,

PS: Of course, my client now wants an immediate solution!

Devart Team
Posts: 264
Joined: Thu 28 Oct 2004 13:56

Re: Reading a VARRAY causes an exception

Post by Oleg » Mon 22 Nov 2004 10:42

We tried to reproduce the problem in the following way:

Created a table

create table num2 (
n tnumbers

where tnumbers is VARRAY(3) OF NUMBER

Inserted a record into the table:

insert into num2 values (tnumbers(-6.046E-17,-6.046E-17,-6.046E-17))

Read a value using the next code sample:

Code: Select all

OracleConnection conn = new OracleConnection();
OracleCommand cmd = new OracleCommand();
conn.ConnectionString = "User Id=scott;Password=tiger;Server=ora;";
cmd.CommandText = "select * from num2";
cmd.Connection = conn;
OracleDataReader rd = cmd.ExecuteReader();
OracleArray arr = rd.GetOracleArray(0);
if (arr != null) {
And received a correct result.

Post Reply