private static void GetNullOutputParameterSmi(SmiMetaData metaData, SqlBuffer targetBuffer, ref object result)
 {
     if (SqlDbType.Udt == metaData.SqlDbType)
     {
         result = NullUdtInstance(metaData);
     }
     else
     {
         SqlBuffer.StorageType stype = SqlDbTypeToStorageType(metaData.SqlDbType);
         if (SqlBuffer.StorageType.Empty == stype)
         {
             result = DBNull.Value;
         }
         else if (SqlBuffer.StorageType.SqlBinary == stype)
         {
             // special case SqlBinary, 'cause tds parser never sets SqlBuffer to null, just to empty!
             targetBuffer.SqlBinary = SqlBinary.Null;
         }
         else if (SqlBuffer.StorageType.SqlGuid == stype)
         {
             targetBuffer.SqlGuid = SqlGuid.Null;
         }
         else
         {
             targetBuffer.SetToNullOfType(stype);
         }
     }
 }
 static ValueUtilsSmi()
 {
     object[] objArray = new object[0x23];
     objArray[0] = SqlInt64.Null;
     objArray[1] = SqlBinary.Null;
     objArray[2] = SqlBoolean.Null;
     objArray[3] = SqlString.Null;
     objArray[4] = SqlDateTime.Null;
     objArray[5] = SqlDecimal.Null;
     objArray[6] = SqlDouble.Null;
     objArray[7] = SqlBinary.Null;
     objArray[8] = SqlInt32.Null;
     objArray[9] = SqlMoney.Null;
     objArray[10] = SqlString.Null;
     objArray[11] = SqlString.Null;
     objArray[12] = SqlString.Null;
     objArray[13] = SqlSingle.Null;
     objArray[14] = SqlGuid.Null;
     objArray[15] = SqlDateTime.Null;
     objArray[0x10] = SqlInt16.Null;
     objArray[0x11] = SqlMoney.Null;
     objArray[0x12] = SqlString.Null;
     objArray[0x13] = SqlBinary.Null;
     objArray[20] = SqlByte.Null;
     objArray[0x15] = SqlBinary.Null;
     objArray[0x16] = SqlString.Null;
     objArray[0x17] = DBNull.Value;
     objArray[0x19] = SqlXml.Null;
     objArray[0x1f] = DBNull.Value;
     objArray[0x20] = DBNull.Value;
     objArray[0x21] = DBNull.Value;
     objArray[0x22] = DBNull.Value;
     __typeSpecificNullForSqlValue = objArray;
     SqlBuffer.StorageType[] typeArray = new SqlBuffer.StorageType[0x23];
     typeArray[0] = SqlBuffer.StorageType.Int64;
     typeArray[1] = SqlBuffer.StorageType.SqlBinary;
     typeArray[2] = SqlBuffer.StorageType.Boolean;
     typeArray[3] = SqlBuffer.StorageType.String;
     typeArray[4] = SqlBuffer.StorageType.DateTime;
     typeArray[5] = SqlBuffer.StorageType.Decimal;
     typeArray[6] = SqlBuffer.StorageType.Double;
     typeArray[7] = SqlBuffer.StorageType.SqlBinary;
     typeArray[8] = SqlBuffer.StorageType.Int32;
     typeArray[9] = SqlBuffer.StorageType.Money;
     typeArray[10] = SqlBuffer.StorageType.String;
     typeArray[11] = SqlBuffer.StorageType.String;
     typeArray[12] = SqlBuffer.StorageType.String;
     typeArray[13] = SqlBuffer.StorageType.Single;
     typeArray[14] = SqlBuffer.StorageType.SqlGuid;
     typeArray[15] = SqlBuffer.StorageType.DateTime;
     typeArray[0x10] = SqlBuffer.StorageType.Int16;
     typeArray[0x11] = SqlBuffer.StorageType.Money;
     typeArray[0x12] = SqlBuffer.StorageType.String;
     typeArray[0x13] = SqlBuffer.StorageType.SqlBinary;
     typeArray[20] = SqlBuffer.StorageType.Byte;
     typeArray[0x15] = SqlBuffer.StorageType.SqlBinary;
     typeArray[0x16] = SqlBuffer.StorageType.String;
     typeArray[0x19] = SqlBuffer.StorageType.SqlXml;
     typeArray[0x1f] = SqlBuffer.StorageType.Date;
     typeArray[0x20] = SqlBuffer.StorageType.Time;
     typeArray[0x21] = SqlBuffer.StorageType.DateTime2;
     typeArray[0x22] = SqlBuffer.StorageType.DateTimeOffset;
     __dbTypeToStorageType = typeArray;
     x_dtSmallMax = new DateTime(0x81f, 6, 6, 0x17, 0x3b, 0x1d, 0x3e6);
     x_dtSmallMin = new DateTime(0x76b, 12, 0x1f, 0x17, 0x3b, 0x1d, 0x3e7);
     x_timeMin = TimeSpan.Zero;
     x_timeMax = new TimeSpan(0xc92a69bfffL);
     __canAccessGetterDirectly = new bool[,] { 
         { 
             false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, 
             false, true, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, 
             false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, 
         { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, true, false, true, false, false, false, true, false, false, true, true, true, false, false, false, 
             false, false, true, true, false, true, true, false, false, true, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false, true, false, true, false, false, false, false, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, 
             false, true, false
          }, { 
             false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, 
             false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, 
         { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false, true, false, true, false, false, false, false, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             true, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, true
          }
      };
     __canAccessSetterDirectly = new bool[,] { 
         { 
             false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, true, 
             false, true, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, true, false, true, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, 
         { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false, true, false, true, false, true, false, true, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false, true, false, true, false, true, false, false, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, true, 
             false, true, false
          }, { 
             false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, 
         { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, 
             false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, true, false, true, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, true, false, false, false, false, false, false, true, true, true, false, false, false, 
             false, false, true, false, false, false, true, true, false, false, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, 
             false, false, false, true, false, true, false, true, false, false, false, false, false, true, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, 
             false, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             true, false, false
          }, { 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
             false, false, true
          }
      };
 }
        private object GetValueFromSourceRow(int columnOrdinal, _SqlMetaData metadata, int[] UseSqlValue, int destRowIndex)
        {
            if (UseSqlValue[destRowIndex] == 0)
            {
                UseSqlValue[destRowIndex] = -1;
                if ((metadata.metaType.NullableType == 0x6a) || (metadata.metaType.NullableType == 0x6c))
                {
                    Type fieldType = null;
                    switch (this._rowSourceType)
                    {
                    case ValueSourceType.IDataReader:
                        if (this._SqlDataReaderRowSource != null)
                        {
                            fieldType = this._SqlDataReaderRowSource.GetFieldType(columnOrdinal);
                        }
                        break;

                    case ValueSourceType.DataTable:
                    case ValueSourceType.RowArray:
                        fieldType = this._currentRow.Table.Columns[columnOrdinal].DataType;
                        break;
                    }
                    if ((typeof(SqlDecimal) == fieldType) || (typeof(decimal) == fieldType))
                    {
                        UseSqlValue[destRowIndex] = 4;
                    }
                    else if ((typeof(SqlDouble) == fieldType) || (typeof(double) == fieldType))
                    {
                        UseSqlValue[destRowIndex] = 5;
                    }
                    else if ((typeof(SqlSingle) == fieldType) || (typeof(float) == fieldType))
                    {
                        UseSqlValue[destRowIndex] = 10;
                    }
                }
            }
            switch (this._rowSourceType)
            {
            case ValueSourceType.IDataReader:
                if (this._SqlDataReaderRowSource == null)
                {
                    return(((IDataReader)this._rowSource).GetValue(columnOrdinal));
                }
                switch (UseSqlValue[destRowIndex])
                {
                case 4:
                    return(this._SqlDataReaderRowSource.GetSqlDecimal(columnOrdinal));

                case 5:
                    return(new SqlDecimal(this._SqlDataReaderRowSource.GetSqlDouble(columnOrdinal).Value));

                case 10:
                    return(new SqlDecimal((double)this._SqlDataReaderRowSource.GetSqlSingle(columnOrdinal).Value));
                }
                return(this._SqlDataReaderRowSource.GetValue(columnOrdinal));

            case ValueSourceType.DataTable:
            case ValueSourceType.RowArray:
            {
                object obj2 = this._currentRow[columnOrdinal];
                if (((obj2 == null) || (DBNull.Value == obj2)) || (((10 != UseSqlValue[destRowIndex]) && (5 != UseSqlValue[destRowIndex])) && (4 != UseSqlValue[destRowIndex])))
                {
                    return(obj2);
                }
                INullable nullable = obj2 as INullable;
                if ((nullable != null) && nullable.IsNull)
                {
                    return(obj2);
                }
                SqlBuffer.StorageType type2 = (SqlBuffer.StorageType)UseSqlValue[destRowIndex];
                switch (type2)
                {
                case SqlBuffer.StorageType.Decimal:
                    if (nullable == null)
                    {
                        return(new SqlDecimal((decimal)obj2));
                    }
                    return((SqlDecimal)obj2);

                case SqlBuffer.StorageType.Double:
                {
                    if (nullable == null)
                    {
                        double d = (double)obj2;
                        if (double.IsNaN(d))
                        {
                            return(obj2);
                        }
                        return(new SqlDecimal(d));
                    }
                    SqlDouble num4 = (SqlDouble)obj2;
                    return(new SqlDecimal(num4.Value));
                }
                }
                if (type2 != SqlBuffer.StorageType.Single)
                {
                    return(obj2);
                }
                if (nullable != null)
                {
                    SqlSingle num5 = (SqlSingle)obj2;
                    return(new SqlDecimal((double)num5.Value));
                }
                float f = (float)obj2;
                if (float.IsNaN(f))
                {
                    return(obj2);
                }
                return(new SqlDecimal((double)f));
            }
            }
            throw ADP.NotSupported();
        }