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