Fix for bug#382635 - truncate larger values
authorVeerapuram Varadhan <v.varadhan@gmail.com>
Thu, 29 May 2008 17:25:00 +0000 (17:25 -0000)
committerVeerapuram Varadhan <v.varadhan@gmail.com>
Thu, 29 May 2008 17:25:00 +0000 (17:25 -0000)
svn path=/trunk/mcs/; revision=104440

mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog
mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs

index d2da76c6393631abd418f40105cd3277be6f8819..b2e784cb5520a1c6cb8a57fd0525a5d263221846 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-29  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       ** Fixes Bug#382635
+       * TdsMetaParameter.cs (set_Value): Truncate the value to thespecified size.
+
 2007-07-24  Nagappan A  <anagappan@novell.com>
 
        * TdsMetaParameter.cs (Prepare): Fixes Large strings truncated
index 1209bd1f25906a9d9b98b31be0689611d9737258..77b2e5294f46ff94b3b18c6a5223222eaffd61e5 100644 (file)
@@ -97,7 +97,37 @@ namespace Mono.Data.Tds {
 
                public object Value {
                        get { return value; }
-                       set { this.value = value; }
+                       set { 
+                               if (value == DBNull.Value || value == null) {
+                                       this.value = value;
+                                       return;
+                               }
+
+                               // if size is set, truncate the value to specified size
+                               if (value.GetType () == typeof (string)) {
+                                       int len = ((string)value).Length;
+                                       
+                                       if ((TypeName == "nvarchar" || 
+                                            TypeName == "nchar") 
+                                           && isSizeSet && size > 0 && len > size) {
+                                               this.value = ((string)value).Substring (0, size);
+                                       } else {
+                                               this.value = value;
+                                       }
+                               } else if (value.GetType () == typeof (byte[])) {
+                                       int len = ((byte[])value).Length;
+                                       
+                                       if (isSizeSet && size > 0 && len > size ) {
+                                               byte [] tmpVal = new byte [size];
+                                               Array.Copy (((byte[]) value), ((byte[]) this.value), size);
+                                               this.value = tmpVal;
+                                       } else {
+                                               this.value = value;
+                                       }
+                               } else {
+                                       this.value = value;
+                               }
+                       }
                }
 
                public byte Precision {