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(); }