Hello

I've made a little patch. With it, mono transmits datetime (as parameter) in a 
binary format (to avoid culture dependant problems) (7 byte length)
It works well on my machine (on oracle 10g), it should work for all version of 
oracle...
Could you test my patch and submit it to svn...

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: System.Data.OracleClient/OracleParameter.cs
===================================================================
--- System.Data.OracleClient/OracleParameter.cs (revision 47411)
+++ System.Data.OracleClient/OracleParameter.cs (working copy)
@@ -347,19 +347,11 @@
                                        else
                                                throw new NotImplementedException (); // ?

-                                       sDate = dt.ToString (sysDateFormat);
-                                       rsize = 0;
-
-                                       // Get size of buffer
-                                       OciCalls.OCIUnicodeToCharSet (statement.Parent, null, sDate, out rsize);
-
-                                       // Fill buffer
-                                       bytes = new byte[rsize];
-                                       OciCalls.OCIUnicodeToCharSet (statement.Parent, bytes, sDate, out rsize);
-
-                                       bindType = OciDataType.VarChar2;
+
+                                       bytes=PackDate(dt);
+                                       bindType = OciDataType.Date;
                                        //bindValue = Marshal.StringToHGlobalAnsi (sDate);
-                                       bindSize = sDate.Length;
+                                       bindSize=bytes.Length;
                                }
                                else if (oracleType == OracleType.Blob) {
                                        bytes = (byte[]) v;
@@ -781,6 +773,19 @@
                                                second - 1);

                }
+
+               internal byte[] PackDate(DateTime dateValue)
+               {
+                       byte[] buffer=new byte[7];
+                       buffer[0]=(byte)((dateValue.Year/100)+100); //century
+                       buffer[1]=(byte)((dateValue.Year%100)+100); // Year
+                       buffer[2]=(byte)dateValue.Month;
+                       buffer[3]=(byte)dateValue.Day;
+                       buffer[4]=(byte)(dateValue.Hour+1);
+                       buffer[5]=(byte)(dateValue.Minute+1);
+                       buffer[6]=(byte)(dateValue.Second+1);
+                       return buffer;
+               }

                #endregion // Methods

_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to