Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / ADO.NET / January 2006

Tip: Looking for answers? Try searching our database.

MarshalDirectiveException reading OracleType.TimestampWithTZ

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
pfluft - 05 Jan 2006 16:50 GMT
Microsoft .NET Framework 2.0.50727
.NET Framework Data Provider for Oracle
Oracle9i Release 9.2.0.7.0

Some TimestampWithTZ values (e.g. "01-JAN-70 01.00.00.000000 AM
EUROPE/BERLIN") can not be read from an oracle database.
I receive the following Exception:

System.Runtime.InteropServices.MarshalDirectiveException: Cannot marshal
'parameter #5': Invalid managed/unmanaged type combination (Int16/UInt16 must
be paired with I2 or U2).
  at System.Data.Common.UnsafeNativeMethods.OCIDateTimeFromArray(OciHandle
hndl, OciHandle err, Byte[] inarray, UInt32 len, DATATYPE type, OciHandle
datetime, OciHandle reftz, Byte fsprec)
  at System.Data.OracleClient.OracleDateTime.GetBytes(NativeBuffer buffer,
Int32 valueOffset, Int32 lengthOffset, MetaType metaType, OracleConnection
connection)
  at System.Data.OracleClient.OracleDateTime.MarshalToDateTime(NativeBuffer
buffer, Int32 valueOffset, Int32 lengthOffset, MetaType metaType,
OracleConnection connection)
  at
System.Data.OracleClient.OracleColumn.GetDateTime(NativeBuffer_RowBuffer
buffer)
  at System.Data.OracleClient.OracleColumn.GetValue(NativeBuffer_RowBuffer
buffer)
  at System.Data.OracleClient.OracleDataReader.GetValues(Object[] values)
  at
System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)
  at System.Data.ProviderBase.SchemaMapping.LoadDataRow()
  at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
  at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset,
DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32
startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object
parentChapterValue)
  at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables,
IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
  at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,
DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable,
IDbCommand command, CommandBehavior behavior)
  at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32
startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
  at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
  at
WindowsApplication2.DataSet1TableAdapters.TEST_TIMETableAdapter.Fill(TEST_TIMEDataTable
dataTable) in C:\CS2\WindowsApplication2\DataSet1.Designer.cs:line 612
  at WindowsApplication2.Form1.Form1_Load(Object sender, EventArgs e) in
C:\CS2\WindowsApplication2\Form1.cs:line 29
  at System.Windows.Forms.Form.OnLoad(EventArgs e)
  at System.Windows.Forms.Form.OnCreateControl()
  at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
  at System.Windows.Forms.Control.CreateControl()
  at System.Windows.Forms.Control.WmShowWindow(Message& m)
  at System.Windows.Forms.Control.WndProc(Message& m)
  at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
  at System.Windows.Forms.ContainerControl.WndProc(Message& m)
  at System.Windows.Forms.Form.WmShowWindow(Message& m)
  at System.Windows.Forms.Form.WndProc(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg,
IntPtr wparam, IntPtr lparam)

Output from oracle SQL Plus:

SQL> select change_dt,dump(change_dt) from test_time;

CHANGE_DT
---------------------------------------------------------
DUMP(CHANGE_DT)
---------------------------------------------------------
01-JAN-70 01.00.00.000000 AM EUROPE/BERLIN
Typ=181 Len=13: 119,170,1,1,1,1,1,0,0,0,0,133,252

01-JAN-70 01.00.00.000000 AM +01:00
Typ=181 Len=13: 119,170,1,1,1,1,1,0,0,0,0,21,60

The first value causes the problem. The second one can be read without
problems.
According to oracle documents bytes 11 and 12 hold Region id or Timezone
Hour/Minute. I think the Region id can not be handled by the data provider.

Is this a known Bug?

Best regards,
Herwig
Kevin Yu [MSFT] - 06 Jan 2006 02:53 GMT
Hi Herwig,

Did you used a select statement to select directly from a table and filled
to your app? Could you provide some of the SQL statement and your .net code
here?

Kevin Yu
Signature

=======
"This posting is provided "AS IS" with no warranties, and confers no
rights."

pfluft - 09 Jan 2006 09:57 GMT
I used the Designer to build my Application. But with the following console
application I get the same results:

Code:

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.OracleClient;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           DateTime dt;

           using (OracleConnection conn = new OracleConnection("user
id=ebner;data source=a4h048sv3.pls;password=polar"))
           {
               conn.Open();

               OracleCommand cmd = new OracleCommand();

               cmd.Connection = conn;
               cmd.CommandText = "SELECT CHANGE_DT FROM TEST_TIME ORDER BY
COIL_ID";
               cmd.CommandType = CommandType.Text;

               using (OracleDataReader r =
cmd.ExecuteReader(CommandBehavior.CloseConnection) ) {
                   while (r.Read())
                   {
                       dt = r.GetDateTime(0);
                       Console.WriteLine(dt);
                   }
               }
               conn.Close();
           }
       }
   }
}

Output:

2005-12-09 16:32:53

Unhandled Exception:
System.Runtime.InteropServices.MarshalDirectiveException: Cannot marshal
'parameter #5': Invalid managed/unmanaged type combination (Int16/UInt16 must
be paired with I2 or U2).
  at System.Data.Common.UnsafeNativeMethods.OCIDateTimeFromArray(OciHandle
hndl, OciHandle err, Byte[] inarray, UInt32 len, DATATYPE type, OciHandle
datetime, OciHandle reftz, Byte fsprec)
  at System.Data.OracleClient.OracleDateTime.GetBytes(NativeBuffer buffer,
Int32 valueOffset, Int32 lengthOffset, MetaType metaType, OracleConnection
connection)
  at System.Data.OracleClient.OracleDateTime.MarshalToDateTime(NativeBuffer
buffer, Int32 valueOffset, Int32 lengthOffset, MetaType metaType,
OracleConnection connection)
  at
System.Data.OracleClient.OracleColumn.GetDateTime(NativeBuffer_RowBuffer
buffer)
  at System.Data.OracleClient.OracleDataReader.GetDateTime(Int32 i)
  at ConsoleApplication1.Program.Main(String[] args) in
C:\CS2\ConsoleApplication1\Program.cs:line 29
 
Data used:

SQL> select * from test_time order by coil_id;

  COIL_ID
----------
CHANGE_DT
---------------------------------------------------------------------------
        1
09-DEC-05 04.32.53.750000 PM +01:00

        2
01-JAN-70 01.00.00.000000 AM EUROPE/BERLIN

SQL> desc test_time;
Name                                      Null?    Type
----------------------------------------- --------
----------------------------
COIL_ID                                   NOT NULL NUMBER(10)
CHANGE_DT                                 NOT NULL TIMESTAMP(6) WITH TIME
ZONE

SQL>

Best Regards,
Herwig
Kevin Yu [MSFT] - 10 Jan 2006 09:33 GMT
Hi Herwig,

Thanks for your code. I checked it, there seems to be nothing wrong.
However, With my research, I didn't find any related known issues on this.
Also, I don't have enough resource on this issue. In this case, I suggest
you try to contact Microsoft PSS for more information on it. You can find
the contact information from the following link:

http://support.microsoft.com/default.aspx?scid=fh;EN-US;OfferProPhone

Kevin Yu
Signature

=======
"This posting is provided "AS IS" with no warranties, and confers no
rights."


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.