Ejemplo n.º 1
0
        /// <summary>
        /// Função para buscar valor de um campo recordset dinamicamente
        /// </summary>
        /// <param name="rs">recordset para buscar dados</param>
        /// <param name="field">nome field para buscar dentro do recordset</param>
        /// <param name="defaultVal">valor default para retorno</param>
        /// <param name="tipoCastFinal">type para forçar cast</param>
        /// <returns></returns>
        public static dynamic GetValFromRS(Recordset rs, string field, dynamic defaultVal, Type tipoCastFinal)
        {
            try
            {
                dynamic result;

                // verifico se o campo existe
                if (!rs.CheckFieldExists(field))
                    throw new ArgumentOutOfRangeException(string.Format("O campo {0} não foi encontrado dentro do contexto do recordset, verifique", field));

                var originalValue = rs.Fields[field].Value;
                Field fieldValue = rs.Fields[field];

                // caso tenha perdido a referência após a 1ª referência
                if (!(originalValue is DBNull) && (fieldValue.Value is DBNull || fieldValue.Value == null))
                {
                    result = GetValField(originalValue);
                }
                else
                {
                    // estando nulo, retorna o valor default
                    if (fieldValue.Value is DBNull || fieldValue.Value == null)
                        return defaultVal;

                    // busco o valor do ADO Field
                    result = GetValField(fieldValue);
                }


                // verificar se isso ta passando
                if (tipoCastFinal.IsGenericType && tipoCastFinal.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
                    tipoCastFinal = Nullable.GetUnderlyingType(tipoCastFinal);

                // no final converto pro tipo chamado
                return Convert.ChangeType(result, tipoCastFinal);
            }
            catch (Exception ex)
            {
                var msg = string.Format("Ocorreu um erro sem tratamento na função MyExtensions.GetVal(), field : {0}, mensagem : {1}", field, ex.Message);
                Console.WriteLine(msg);
                throw new Exception(msg);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Função para buscar valor de um campo recordset dinamicamente
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="rs"></param>
        /// <param name="field"></param>
        /// <param name="defaultVal"></param>
        /// <returns></returns>
        public static T GetVal <T>(this Recordset rs, string field, T defaultVal = default)
        {
            try
            {
                dynamic result;
                var     type = typeof(T);

                if (!rs.CheckFieldExists(field))
                {
                    throw new ArgumentOutOfRangeException(string.Format("O campo {0} não foi encontrado dentro do contexto do recordset, verifique", field));
                }

                // estando nulo, retorna o valor default
                if (rs.Fields[field].Value is DBNull || rs.Fields[field].Value == null)
                {
                    return(defaultVal);
                }

                // busco o valor do ADO Field
                result = ADOUtil.GetValField(rs.Fields[field]);

                // verificar se essa opção está passando
                if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable <>)))
                {
                    type = Nullable.GetUnderlyingType(type);
                }

                // converto o tipo e devolvo
                return(Convert.ChangeType(result, type));
            }
            catch (Exception ex)
            {
                var msg = string.Format("Ocorreu um erro sem tratamento na função MyExtensions.ToInt(), field : {0}, mensagem : {1}", field, ex.Message);
                Console.WriteLine(msg);
                throw new Exception(msg);
            }
        }