private object ConvertValue(object value, _SqlMetaData metadata) { object obj2; if (ADP.IsNull(value)) { if (!metadata.isNullable) { throw SQL.BulkLoadBulkLoadNotAllowDBNull(metadata.column); } return(value); } MetaType metaType = metadata.metaType; try { MetaType metaTypeFromSqlDbType; SqlDecimal num2; switch (metaType.NullableType) { case 0x22: case 0x23: case 0x24: case 0x26: case 40: case 0x29: case 0x2a: case 0x2b: case 50: case 0x3a: case 0x3b: case 0x3d: case 0x3e: case 0x68: case 0x6d: case 110: case 0x6f: case 0xa5: case 0xa7: case 0xad: case 0xaf: metaTypeFromSqlDbType = MetaType.GetMetaTypeFromSqlDbType(metaType.SqlDbType, false); value = SqlParameter.CoerceValue(value, metaTypeFromSqlDbType); goto Label_0290; case 0x62: value = this.ValidateBulkCopyVariant(value); goto Label_0290; case 0x63: case 0xef: case 0xe7: { metaTypeFromSqlDbType = MetaType.GetMetaTypeFromSqlDbType(metaType.SqlDbType, false); value = SqlParameter.CoerceValue(value, metaTypeFromSqlDbType); int num3 = (value is string) ? ((string)value).Length : ((SqlString)value).Value.Length; if (num3 > (metadata.length / 2)) { throw SQL.BulkLoadStringTooLong(); } goto Label_0290; } case 0x6a: case 0x6c: metaTypeFromSqlDbType = MetaType.GetMetaTypeFromSqlDbType(metaType.SqlDbType, false); value = SqlParameter.CoerceValue(value, metaTypeFromSqlDbType); if (!(value is SqlDecimal)) { break; } num2 = (SqlDecimal)value; goto Label_017D; case 240: if (value.GetType() != typeof(byte[])) { value = this._connection.GetBytes(value); } goto Label_0290; case 0xf1: if (value is XmlReader) { value = MetaType.GetStringFromXml((XmlReader)value); } goto Label_0290; default: throw SQL.BulkLoadCannotConvertValue(value.GetType(), metadata.metaType, null); } num2 = new SqlDecimal((decimal)value); Label_017D: if (num2.Scale != metadata.scale) { num2 = TdsParser.AdjustSqlDecimalScale(num2, metadata.scale); value = num2; } if (num2.Precision > metadata.precision) { throw SQL.BulkLoadCannotConvertValue(value.GetType(), metaTypeFromSqlDbType, ADP.ParameterValueOutOfRange(num2)); } Label_0290: obj2 = value; } catch (Exception exception) { if (!ADP.IsCatchableExceptionType(exception)) { throw; } throw SQL.BulkLoadCannotConvertValue(value.GetType(), metadata.metaType, exception); } return(obj2); }