[Mono-devel-list] TimeStamp support on oracle...

Hubert FONGARNAND informatique.internet at fiducial.fr
Fri Jul 29 09:31:13 EDT 2005


I've made a new patch... It worked when I send a timestamp in string format, 
but with binary format it fails after binding parameters t... with an 
undebuggable error:
Unhandled Exception: System.NullReferenceException: Object reference not set 
to an instance of an object
in <0x00000> <unknown method>
in (wrapper managed-to-native) OciNativeCalls:OCIStmtExecute 
(intptr,intptr,intptr,uint,uint,intptr,intptr,System.Data.OracleClient.Oci.OciExecuteMode)
in <0x0002f> System.Data.OracleClient.Oci.OciCalls:OCIStmtExecute (IntPtr 
svchp, IntPtr stmthp, IntPtr errhp, Boolean iters, UInt32 rowoff, IntPtr 
snap_in, IntPtr snap_out, OciExecuteMode mode)
in <0x000a8> System.Data.OracleClient.Oci.OciStatementHandle:Execute (Boolean 
nonQuery, Boolean useAutoCommit, Boolean schemaOnly)
in <0x00013> System.Data.OracleClient.Oci.OciStatementHandle:ExecuteNonQuery 
(Boolean useAutoCommit)
in <0x0005d> System.Data.OracleClient.OracleCommand:ExecuteNonQueryInternal 
(System.Data.OracleClient.Oci.OciStatementHandle statement, Boolean 
useAutoCommit)
in <0x00081> System.Data.OracleClient.OracleCommand:ExecuteNonQuery ()
in (wrapper remoting-invoke-with-check) 
System.Data.OracleClient.OracleCommand:ExecuteNonQuery ()

i don't know why?
Can you have a look on my patch...
thanks!


Le Vendredi 29 Juillet 2005 10:02, Hubert FONGARNAND a écrit :
> Le Vendredi 29 Juillet 2005 02:48, vous avez écrit :
> > You need to modify OciDefineHandle to deal with the TIMESTAMP.
> >
> > See Define(), DefineDate(), and GetValue().
> >
> > You can create a new function called DefineTimestamp() based on
> > DefineDate() and allocate space for it based OciDataType.TimeStamp.
> >
> > What about TIMESTAMP WITH TIMEZONE and TIMESTAMP WITH LOCAL TIMEZONE?
>
> For instance, i just need a timestamp... (if it works I will implement the
> others)
>
> > There is also INTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND data
> > types. This is equivalent to System.TimeSpan and
> > System.Data.OracleClient types OracleMonthSpan and OracleTimeSpan.
> > These have not been implemented either.
> >
> > Also, in OracleParameter, you need to allocate space for the Timestamp
> > for the output parameter, and you need to convert a .NET DateTime to an
> > Oracle TIMESTAMP by using OCIDateTime functions for the input parameter.
>
> For input parameters I think I will just implement a PackTimeStamp and an
> UnPackTimeStamp (like my PackDate function) to build the byte[]
>
> > An Oracle Date uses OCIDate while TIMESTAMP uses an OCIDateTime.
> >
> > You will need to DllImport into function OCIDateTimeConstruct() to
> > create and set the date and time in a OCIDateTime.  You will also need
> > to DllImport into function OCIDateTimeGetTime() to get the time from the
> > OCIDateTime and OCIDateTimeGetDate() to get the date from the
> > OCIDateTime.  There are other functions for the time zone, etc...
> >
> > http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci18
> >ma p002.htm#i512069
>
> Thank you...
>
> > Hubert FONGARNAND wrote:
> > >I really need the new TimeStamp type (supported starting from oracle 9).
> > > It's a MS.NET supported type (i've made tests)...
> > >I've begin to do a little patch (attached) to add the timestamp type to
> > >oracle.client...
> > >but... I've a strange error when i try to do a Fill, it failed with:
> > >
> > >Unhandled Exception: System.Data.OracleClient.OracleException:
> > >in <0x0013d> System.Data.OracleClient.Oci.OciStatementHandle:Fetch ()
> > >in <0x0002c> System.Data.OracleClient.OracleDataReader:Read ()
> > >in <0x002f4> System.Data.Common.DbDataAdapter:FillTable
> > > (System.Data.DataTable dataTable, IDataReader dataReader, Int32
> > > startRecord, Int32 maxRecords, System.Int32 counter)
> > >in <0x0011f> System.Data.Common.DbDataAdapter:Fill (System.Data.DataSet
> > >dataSet, System.String srcTable, IDataReader dataReader, Int32
> > > startRecord, Int32 maxRecords)
> > >in <0x000d5> System.Data.Common.DbDataAdapter:Fill (System.Data.DataSet
> > >dataSet, Int32 startRecord, Int32 maxRecords, System.String srcTable,
> > >IDbCommand command, CommandBehavior behavior)
> > >in <0x00044> System.Data.Common.DbDataAdapter:Fill (System.Data.DataSet
> > >dataSet)
> > >in <0x007b8> ConsoleIntranet.Class1:TestTimestamp ()
> > >in <0x00015> ConsoleIntranet.Class1:Main (System.String[] args)
> > >
> > >Could someone help me how to resolve this issue?
> > >thanks
> > >_______________________________________________
> > >Ce message et les éventuels documents joints peuvent contenir des
> > > informations confidentielles. Au cas où il ne vous serait pas destiné,
> > > nous vous remercions de bien vouloir le supprimer et en aviser
> > > immédiatement l'expéditeur. Toute utilisation de ce message non
> > > conforme à sa destination, toute diffusion ou publication, totale ou
> > > partielle et quel qu'en soit le moyen est formellement interdite. Les
> > > communications sur internet n'étant pas sécurisées, l'intégrité de ce
> > > message n'est pas assurée et la société émettrice ne peut être tenue
> > > pour responsable de son contenu.
> > >
> > >
> > >------------------------------------------------------------------------
> > >
> > >Index:
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleParam
> > >et er.cs
> > > =================================================================== ---
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleParam
> > >et er.cs      (revision 47807) +++
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleParam
> > >et er.cs      (working copy) @@ -258,7 +258,7 @@
> > >                        OciDataType bindType = ociType;
> > >                        IntPtr bindValue = IntPtr.Zero;
> > >                        int rsize = 0;
> > >-
> > >+                       Console.WriteLine("Parametre :
> > > "+ociType.ToString()); // TODO: handle InputOutput and Return
> > > parameters if (direction == ParameterDirection.Output) { // TODO: need
> > > to figure out how OracleParameter @@ -324,9 +324,11 @@
> > >                                bindSize = 0;
> > >                        }
> > >                        else {
> > >+                               Console.WriteLine("OracleType
> > > "+oracleType.ToString()); // TODO: do other data types and oracle data
> > > types // should I be using IConvertible to convert? if (oracleType ==
> > > OracleType.DateTime) { +
> > > Console.WriteLine("DATE!!!"); string oraDateFormat =
> > > connection.GetSessionDateFormat (); string sysDateFormat =
> > > OracleDateTime.ConvertOracleDateFormatToSystemDateTime (oraDateFormat);
> > >
> > >@@ -637,8 +639,11 @@
> > >                                dbType = DbType.AnsiStringFixedLength;
> > >                                ociType = OciDataType.Char;
> > >                                break;
> > >+                       case OracleType.Timestamp:
> > >+                               dbType = DbType.DateTime;
> > >+                               ociType = OciDataType.TimeStamp;
> > >+                               break;
> > >                        case OracleType.DateTime:
> > >-                       case OracleType.Timestamp:
> > >                        case OracleType.TimestampLocal:
> > >                        case OracleType.TimestampWithTZ:
> > >                                dbType = DbType.DateTime;
> > >Index:
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciData
> > >Ty pe.cs
> > > =================================================================== ---
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciData
> > >Ty pe.cs      (revision 47807) +++
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciData
> > >Ty pe.cs      (working copy) @@ -43,6 +43,7 @@
> > >                Blob = 0x71,
> > >                BFile = 0x72,
> > >                OciString = 0x9b,
> > >-               OciDate = 0x9c
> > >+               OciDate = 0x9c,
> > >+               TimeStamp = 0xbb
> > >        }
> > > }
> > >Index:
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciPara
> > >me terDescriptor.cs
> > > =================================================================== ---
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciPara
> > >me terDescriptor.cs   (revision 47807) +++
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciPara
> > >me terDescriptor.cs   (working copy) @@ -67,6 +67,7 @@
> > >
> > >                public static OracleType OciDataTypeToOracleType
> > > (OciDataType ociType) {
> > >+                       Console.WriteLine(ociType.ToString());
> > >                        switch (ociType) {
> > >                        case OciDataType.VarChar2:
> > >                                return OracleType.VarChar;
> > >@@ -120,6 +121,8 @@
> > >                                return OracleType.VarChar;
> > >                        case OciDataType.OciDate:
> > >                                return OracleType.DateTime;
> > >+                       case OciDataType.TimeStamp:
> > >+                               return OracleType.Timestamp;
> > >                        default:
> > >                                throw new NotImplementedException ();
> > >                        }
> > >@@ -180,6 +183,8 @@
> > >                                return typeof (System.String);
> > >                        case "OciDate":
> > >                                return typeof (System.DateTime);
> > >+                       case "TimeStamp":
> > >+                               return typeof (System.DateTime);
> > >                        default:
> > >                                // FIXME: are these types correct?
> > >                                return typeof(System.String);
> > >@@ -242,6 +247,8 @@
> > >                                        return "OciString";
> > >                                case OciDataType.OciDate:
> > >                                        return "OciDate";
> > >+                               case OciDataType.TimeStamp:
> > >+                                       return "TimeStamp";
> > >                                default:
> > >                                        return "Unknown";
> > >                        }
> > >Index:
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStat
> > >em entHandle.cs
> > > =================================================================== ---
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStat
> > >em entHandle.cs       (revision 47807) +++
> > > mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStat
> > >em entHandle.cs       (working copy) @@ -212,8 +212,9 @@
> > >                                1,
> > >                                2,
> > >                                0);
> > >-
> > >+               Console.WriteLine("FETCH "+status.ToString());
> > >                        switch (status) {
> > >+
> > >                        case OciGlue.OCI_NO_DATA:
> > >                                moreResults = false;
> > >                                break;
> > >
> > >
> > >------------------------------------------------------------------------
> > >
> > >_______________________________________________
> > >Mono-devel-list mailing list
> > >Mono-devel-list at lists.ximian.com
> > >http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
> _______________________________________________
> Ce message et les éventuels documents joints peuvent contenir des
> informations confidentielles. Au cas où il ne vous serait pas destiné, nous
> vous remercions de bien vouloir le supprimer et en aviser immédiatement
> l'expéditeur. Toute utilisation de ce message non conforme à sa
> destination, toute diffusion ou publication, totale ou partielle et quel
> qu'en soit le moyen est formellement interdite. Les communications sur
> internet n'étant pas sécurisées, l'intégrité de ce message n'est pas
> assurée et la société émettrice ne peut être tenue pour responsable de son
> contenu. _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
_______________________________________________
Ce message et les éventuels documents joints peuvent contenir des informations confidentielles.
Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir le supprimer et en aviser immédiatement l'expéditeur. Toute utilisation de ce message non conforme à sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite.
Les communications sur internet n'étant pas sécurisées, l'intégrité de ce message n'est pas assurée et la société émettrice ne peut être tenue pour responsable de son contenu.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: timestamp.diff
Type: text/x-diff
Size: 8283 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20050729/98c5f29e/attachment.bin 


More information about the Mono-devel-list mailing list