protected Dictionary <String, DbParameter> criarParamatros(IEntidade entidade) { Type tipo = entidade.GetType(); Dictionary <String, DbParameter> param = new Dictionary <String, DbParameter>(); Dictionary <String, Type> tipos = entidade.obterTiposMapeado(); foreach (String k in tipos.Keys) { PropertyInfo p = tipo.GetProperty(k, new Type[] { }); if (p == null || p.GetCustomAttributes(typeof(Transiente), true).Length > 0) { continue; } if (p.GetValue(entidade, null) == null) { param.Add(k, ad.criaParametro(k, ConverteUtils.converteParaDbType(tipos[k]), DBNull.Value)); } else if (tipos[k].IsEnum) { param.Add(k, ad.criaParametro(k, DbType.Int32, (int)p.GetValue(entidade, null))); } else if (tipos[k].IsSubclassOf(typeof(AbstractEntidade))) {//Se for uma entidade: 1-obtem seu mapeamento de chaves, 2-Pega a primeira chave e passa para o mapeamento IEntidade tmp = (IEntidade)p.GetValue(entidade); Dictionary <string, Type> chv = tmp.obterTiposMapeadoChave(); String priChv = chv.Keys.First(); param.Add(k, ad.criaParametro(k, ConverteUtils.converteParaDbType(chv[priChv]), tmp[priChv])); } else if (tipos[k] == typeof(TimeSpan)) { TimeSpan ts = (TimeSpan)p.GetValue(entidade, null); //DateTime data = new DateTime(1981, 1, 30, ts.Hours, ts.Minutes, ts.Seconds); param.Add(k, ad.criaParametro(k, ConverteUtils.converteParaDbType(tipos[k]), ts)); } else { param.Add(k, ad.criaParametro(k, ConverteUtils.converteParaDbType(tipos[k]), p.GetValue(entidade, null))); } } return(param); }
public virtual void excluir(E entidade) { Type tipo = typeof(E); List <DbParameter> param = new List <DbParameter>(); Dictionary <String, Type> tipos = entidade.obterTiposMapeadoChave(); foreach (String k in tipos.Keys) { param.Add(ad.criaParametro(k, ConverteUtils.converteParaDbType(tipos[k]), tipo.GetProperty(k, new Type[] { }).GetValue(entidade, null))); } bool controleInterno = ad.conexaoFechada(); if (controleInterno) { ad.abreConexao(); } StringBuilder sql = new StringBuilder("Delete from "); sql.Append(obterTabela()); sql.Append(entidade.whereComChave()); try { ad.executaComando(sql.ToString(), param.ToArray()); } catch (Exception ex) { String msg = String.Format("Falha ao tentar excluir registro no banco de dados.\n{0}", ex.Message); if (ex.Message.IndexOf("FK_") > -1) { msg = String.Format("Falha de integridade referencia na tentativa de excluir o registro, possívelmente ele já esta em uso pelo sistema.\n{0}", ex.Message); } throw new Exception(msg, ex); } if (controleInterno) { ad.fechaConexao(); } }
public virtual E obter(E chave) { bool controleInterno = ad.conexaoFechada(); if (controleInterno) { ad.abreConexao(); } List <DbParameter> param = new List <DbParameter>(); Dictionary <String, Type> tipos = chave.obterTiposMapeadoChave(); foreach (String k in tipos.Keys) { param.Add(ad.criaParametro(k, ConverteUtils.converteParaDbType(tipos[k]), typeof(E).GetProperty(k, new Type[] { }).GetValue(chave, null))); } StringBuilder sql = new StringBuilder("Select * from "); sql.Append(obterTabela()); sql.Append(chave.whereComChave()); E entidade = null; IDataReader dr = ad.retornaDR(sql.ToString(), param.ToArray()); if (dr.Read()) { entidade = (E)typeof(E).GetConstructors()[0].Invoke(null); entidade.deReader(dr); } dr.Close(); if (controleInterno) { ad.fechaConexao(); } return(entidade); }
public AcessaDadosConstrutor adicionaSqlComParametro(ISqlConstrutor sqlConstrutor, String propriedade, object valorParametro) { DbType tipoParam = ConverteUtils.converteParaDbType(valorParametro.GetType()); return(adicionaSqlComParametro(sqlConstrutor, propriedade, tipoParam, valorParametro)); }
public AcessaDadosConstrutor adicionaParametro(string nomeParametro, object valorParametro) { return(adicionaParametro(nomeParametro, ConverteUtils.converteParaDbType(valorParametro.GetType()), valorParametro)); }