2005-07-25 Daniel Morgan <danielmorgan@verizon.net>
authorDaniel Morgan <monodanmorg@yahoo.com>
Tue, 26 Jul 2005 03:37:18 +0000 (03:37 -0000)
committerDaniel Morgan <monodanmorg@yahoo.com>
Tue, 26 Jul 2005 03:37:18 +0000 (03:37 -0000)
* System.Data.OracleClient/OracleParameter.cs: apply
patch from
Hubert FONGARNAND <informatique.internet@fiducial.fr>
to tranmit an input paramter that is a date in a binary format
instead of a character format to avoid culture
dependent problems

svn path=/trunk/mcs/; revision=47677

mcs/class/System.Data.OracleClient/ChangeLog
mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleParameter.cs

index b5cd9e0609f40fa9f9c858eacbf30493343913b0..e2eeacb1ed79645f8554849eba671283fc5a0e79 100644 (file)
@@ -1,3 +1,12 @@
+2005-07-25  Daniel Morgan <danielmorgan@verizon.net>
+
+       * System.Data.OracleClient/OracleParameter.cs: apply
+       patch from 
+       Hubert FONGARNAND <informatique.internet@fiducial.fr>
+       to tranmit an input paramter that is a date in a binary format
+       instead of a character format to avoid culture 
+       dependent problems
+
 2005-07-17  Daniel Morgan <danielmorgan@verizon.net>
 
        * System.Data.OracleClient/OracleDataReader.cs:
index 70a6207783ee0cf2c488b58180c0f85f39f66ddd..9c6fbd95ab59f93e7bbce9ca41bee95b26210539 100644 (file)
 // Authors: 
 //    Tim Coleman <tim@timcoleman.com>
 //    Daniel Moragn <danielmorgan@verizon.net>
+//    Hubert FONGARNAND <informatique.internet@fiducial.fr>
 //
 // Copyright (C) Tim Coleman , 2003
 // Copyright (C) Daniel Morgan, 2005
+// Copyright (C) Hubert FONGARNAND, 2005
 //
 // Licensed under the MIT/X11 License.
 //
@@ -61,23 +63,23 @@ namespace System.Data.OracleClient {
 
                #region Constructors
 
-               // constructor for cloning the object\r
-               internal OracleParameter (OracleParameter value) {\r
-                       this.name = value.name;\r
-                       this.oracleType = value.oracleType;\r
-                       this.ociType = value.ociType;\r
-                       this.size = value.size;\r
-                       this.direction = value.direction;\r
-                       this.isNullable = value.isNullable;\r
-                       this.precision = value.precision;\r
-                       this.scale = value.scale;\r
-                       this.srcColumn = value.srcColumn;\r
-                       this.srcVersion = value.srcVersion;\r
-                       this.dbType = value.dbType;\r
-                       this.offset = value.offset;\r
-                       this.sizeSet = value.sizeSet;\r
-                       this.value = value.value;\r
-                       this.lobLocator = value.lobLocator;\r
+               // constructor for cloning the object
+               internal OracleParameter (OracleParameter value) {
+                       this.name = value.name;
+                       this.oracleType = value.oracleType;
+                       this.ociType = value.ociType;
+                       this.size = value.size;
+                       this.direction = value.direction;
+                       this.isNullable = value.isNullable;
+                       this.precision = value.precision;
+                       this.scale = value.scale;
+                       this.srcColumn = value.srcColumn;
+                       this.srcVersion = value.srcVersion;
+                       this.dbType = value.dbType;
+                       this.offset = value.offset;
+                       this.sizeSet = value.sizeSet;
+                       this.value = value.value;
+                       this.lobLocator = value.lobLocator;
                }
 
                public OracleParameter ()
@@ -347,19 +349,9 @@ namespace System.Data.OracleClient {
                                        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; 
-                                       //bindValue = Marshal.StringToHGlobalAnsi (sDate);
-                                       bindSize = sDate.Length;
+                                       bytes = PackDate (dt);
+                                       bindType = OciDataType.Date;
+                                       bindSize = bytes.Length;
                                }
                                else if (oracleType == OracleType.Blob) {
                                        bytes = (byte[]) v;
@@ -380,11 +372,11 @@ namespace System.Data.OracleClient {
                                        bindType = OciDataType.Long;
                                        bindSize = bytes.Length;
                                }
-                               else if (oracleType == OracleType.Raw) {\r
-                                       byte[] val = v as byte[];\r
-                                       bindValue = Marshal.AllocHGlobal (val.Length);\r
-                                       Marshal.Copy (val, 0, bindValue, val.Length);\r
-                                       bindSize = val.Length;\r
+                               else if (oracleType == OracleType.Raw) {
+                                       byte[] val = v as byte[];
+                                       bindValue = Marshal.AllocHGlobal (val.Length);
+                                       Marshal.Copy (val, 0, bindValue, val.Length);
+                                       bindSize = val.Length;
                                }
                                else {
                                        string svalue = v.ToString ();
@@ -782,6 +774,21 @@ namespace System.Data.OracleClient {
 
                }
 
+               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
 
                internal sealed class OracleParameterConverter : ExpandableObjectConverter