title: Decimal conversion issue from Oracle to SQL Server via OleDB/Oracle provider
body: <p><strong>EDIT: I am now strongly suspecting this behavior is due to a bug in the OleDB.Oracle provider. Upon other testing, I was able to perform Select statements against other CAST column values with negative scale that did <em>not</em> cause the 'Decimal byte constructor...' exception. I also note that the provider is returning the <em>absolute value</em> of the scale when viewing the schema, eg scale of -2 is returned as 2. Additionally, this same test query does not cause an exception when run through the ODP.NET driver  (rather than the Oracle OLEDB provider). Changing the numeric delimiter as suggested by Lalit (in comments) did not affect the results (but I thank him for his time nonetheless). I continue to research this problem and will advise if more information is realized.</strong></p>
  
  <p>I have a 64-bit C# application that fetches data from an Oracle database via the Oracle 11g OLEDB provider. When Oracle returns a numeric type defined  or cast with negative scale (such as 'Select Cast(123.1 as Number(3,-1))', the mapped OleDB schema (from <code>GetSchemaTable</code>) is reporting that column as a Decimal with a scale of 255. The documentation indicates 255 is intended to represent an N/A or irrelevant value. </p>
  
  <p>When <code>OleDBDataReader.GetValues()</code> is later called on the row containing such a column, an ArgumentException is thrown, advising that a 'Decimal byte array constructor...requires four valid decimal bytes," telling me that even though the OleDB Provider thinks its Decimal data, there's no valid Decimal data to read. I'm making an assumption that data is present, but not sure exactly what.</p>
  
  <p>I have tried:</p>
  
  <ol>
  <li>Explicitly getting the bytes from the column via calls to <code>OleDbDataReader.GetBytes</code> (even a call to size a buffer excepts), but doing so throws "Specified cast is not valid" ArgumentExceptions. </li>
  <li>Written a chunk of test code to get every possible supported return data type, eg <code>GetInt16</code>, <code>GetInt32</code>, etc., etc., and each throws the same exception (invalid cast).</li>
  </ol>
  
  <p>Does the Oracle OleDB provider not even return data to the caller when fetching a column defined with a negative scale? Is there some other mechanism to at least get the bytes "across the pond" and manipulate them on the receiving end?</p>