internal static object GetValue(IRecordWrapper wrapper, IDataRecord reader, int index)
        {
            var method = GetGetValueMethod(reader.GetFieldType(index));

            if (method != null)
            {
                return(method.FastInvoke(wrapper, new object[] { reader, index }));
            }

            return(null);
        }
Beispiel #2
0
        private static T GetValueFromReader <T>(bool isNull, IDataReader reader, IRecordWrapper wrapper, int index)
        {
            var typeCode = Type.GetTypeCode(typeof(T).GetNonNullableType());

            switch (typeCode)
            {
            case TypeCode.Boolean:
                return((T)(object)(isNull ? new bool?() : wrapper.GetBoolean(reader, index)));

            case TypeCode.Char:
                return((T)(object)(isNull ? new char?() : wrapper.GetChar(reader, index)));

            case TypeCode.Byte:
                return((T)(object)(isNull ? new byte?() : wrapper.GetByte(reader, index)));

            case TypeCode.Int16:
                return((T)(object)(isNull ? new short?() : wrapper.GetInt16(reader, index)));

            case TypeCode.Int32:
                return((T)(object)(isNull ? new int?() : wrapper.GetInt32(reader, index)));

            case TypeCode.Int64:
                return((T)(object)(isNull ? new long?() : wrapper.GetInt64(reader, index)));

            case TypeCode.Decimal:
                return((T)(object)(isNull ? new decimal?() : wrapper.GetDecimal(reader, index)));

            case TypeCode.Double:
                return((T)(object)(isNull ? new double?() : wrapper.GetDouble(reader, index)));

            case TypeCode.String:
                return((T)(object)(isNull ? string.Empty : wrapper.GetString(reader, index)));

            case TypeCode.DateTime:
                return((T)(object)(isNull ? new DateTime?() : wrapper.GetDateTime(reader, index)));

            case TypeCode.Single:
                return((T)(object)(isNull ? new float?() : wrapper.GetFloat(reader, index)));

            default:
                return((T)wrapper.GetValue(reader, index));
            }
        }
Beispiel #3
0
        internal static T GetValueByIndex <T>(this IDataReader reader, IRecordWrapper wrapper, int index)
        {
            var isNull = reader.IsDBNull(index);
            var type   = typeof(T);

            if (type.IsArray &&
                type.GetElementType() == typeof(byte))
            {
                return((T)(isNull ? new byte[0] : wrapper.GetValue(reader, index)));
            }

            try
            {
                return(GetValueFromReader <T>(isNull, reader, wrapper, index));
            }
            catch
            {
                return(wrapper.GetValue(reader, index).To <T>());
            }
        }
        private int GetRecordCount(IDataReader reader, IRecordWrapper wrapper)
        {
            var count = 0;

            if (reader.Read())
            {
                switch (reader.GetFieldType(0).GetDbType())
                {
                case DbType.Decimal:
                    count = (int)wrapper.GetDecimal(reader, 0);
                    break;

                case DbType.Int32:
                    count = wrapper.GetInt32(reader, 0);
                    break;

                case DbType.Int64:
                    count = (int)wrapper.GetInt64(reader, 0);
                    break;
                }
            }
            return(count);
        }