**Fixes BNC#364432. Handle DBNull cases.
authorVeerapuram Varadhan <v.varadhan@gmail.com>
Mon, 25 Feb 2008 21:06:22 +0000 (21:06 -0000)
committerVeerapuram Varadhan <v.varadhan@gmail.com>
Mon, 25 Feb 2008 21:06:22 +0000 (21:06 -0000)
svn path=/trunk/mcs/; revision=96590

mcs/class/System.Data/System.Data.Odbc/ChangeLog
mcs/class/System.Data/System.Data.Odbc/OdbcParameter.cs

index 83c571c235422adfa5e2bf4ee230ac2dfaf20206..8837d87a3a8cb3b521cdd83710b86dd53c0bf42b 100644 (file)
@@ -1,3 +1,11 @@
+2008-02-26  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       ** Fixes BNC#364432.
+       * OdbcParameter.cs: (Bind): Set StrLen parameter of
+       SQLBindParameter to reflect NullData in case of DBNull.
+       (CopyValue): If Value is DBNull.Value, just don't try any
+       heroics. 
+       
 2008-02-25  Veerapuram Varadhan  <vvaradhan@novell.com>
 
        ** Fixes BNC#364426.
index b26001eac16d285d44b589cfb6a72bf843703f35..d773619114e7baf125a63f6b392d36f24d31f90d 100644 (file)
@@ -318,10 +318,11 @@ namespace System.Data.Odbc
                        OdbcInputOutputDirection paramdir = libodbc.ConvertParameterDirection(this.Direction);
 
                        _cbLengthInd.EnsureAlloc (Marshal.SizeOf (typeof (int)));
-                       Marshal.WriteInt32 (_cbLengthInd, GetNativeSize ());
+                       Marshal.WriteInt32 (_cbLengthInd, Value == DBNull.Value ? (int)OdbcLengthIndicator.NullData : GetNativeSize ());
                        AllocateBuffer ();
                        ret = libodbc.SQLBindParameter(hstmt, (ushort) ParamNum, (short) paramdir,
-                                                      _typeMap.NativeType, _typeMap.SqlType, Convert.ToUInt32(Size),
+                                                      _typeMap.NativeType, _typeMap.SqlType, 
+                                          Convert.ToUInt32(Size),
                                                       0, (IntPtr) _nativeBuffer, 0, _cbLengthInd);
 
                        // Check for error condition
@@ -416,6 +417,9 @@ namespace System.Data.Odbc
                        if (_nativeBuffer.Handle == IntPtr.Zero)
                                return;
 
+                       if (Value == DBNull.Value)
+                               return;
+                       
                        DateTime dt;
                        TextInfo ti = CultureInfo.InvariantCulture.TextInfo;
                        Encoding enc = Encoding.GetEncoding (ti.ANSICodePage);