public long Guardar(ObjetoBase objBase)
        {
            try
            {
                objBase.Manejador = this;
                AlmacenObjetos.GuardarObjeto(objBase);

                objBase.DBAccesoOBJ         = this.dbAcceso;
                objBase.SUsuarioResponsable = ObjetoBase.UsuarioLogueado;
                return(objBase.Guardar());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
示例#2
0
 //agregar un elemento a lista
 public void AgregadoRapidoAListaRelacionada(ObjetoBase objeto, String nombreLista)
 {
     try
     {
         Type   tipo = this.GetType();
         String nombreTablaRelacion = tipo.Name + "_X_" + objeto.GetType().Name + "_" + nombreLista;
         objeto.dbAcceso = this.dbAcceso;
         long   idObjetoLista = objeto.Guardar();
         String query         = "insert into " + nombreTablaRelacion + "(_Contenedor, _Contenido) values (@_Contenedor, @_Contenido)";
         dbAcceso.EjecutarConsulta(query, new List <object>()
         {
             id, idObjetoLista
         });
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
示例#3
0
        public long Guardar()
        {
            try
            {
                Type tipo = this.GetType();
                if (id < 0)
                {
                    return(-1);
                }
                if (this.esModificado)
                {
                    FieldInfo[]   atributos = tipo.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    String        consulta  = "";
                    List <Object> valores   = new List <object>();
                    //actualizando datos de auditoria
                    if (id == 0)
                    {
                        dtFechaCreacion  = manejador.ObtenerFechaHoraServidor();
                        sUsuarioCreacion = ObjetoBase.UsuarioLogueado;
                    }
                    dtFechaModificacion  = manejador.ObtenerFechaHoraServidor();
                    sUsuarioModificacion = ObjetoBase.UsuarioLogueado;

                    //-----------------------------
                    if (id != 0)
                    {
                        consulta = "update " + tipo.Name + " set ";
                        foreach (FieldInfo atributo in atributos)
                        {
                            if (atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion") || atributo.Name.Equals("estaDeshabilitado"))
                            {
                            }
                            else if (!atributo.Name.StartsWith("_") || atributo.FieldType.Name.Contains("List") || atributo.FieldType.Name.StartsWith("_"))
                            {
                                //|| atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion"))
                                continue; // se ignoran las listas de objetos relacionados y los objetos relacionados
                            }
                            Object valorAtributo = atributo.GetValue(this);
                            if (valorAtributo != null)
                            {
                                consulta += atributo.Name + " = @" + atributo.Name + ", ";
                                valores.Add(valorAtributo);
                            }
                            else
                            {
                                consulta += atributo.Name + " = NULL, ";
                            }
                        }
                        consulta  = consulta.Substring(0, consulta.Length - 2);
                        consulta += " where id = @id; select @id;";
                        valores.Add(id);
                    }
                    else
                    {
                        consulta = "insert " + tipo.Name + "(";
                        foreach (FieldInfo atributo in atributos)
                        {
                            if (atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion") || atributo.Name.Equals("estaDeshabilitado"))
                            {
                            }
                            else if (!atributo.Name.StartsWith("_") || atributo.FieldType.Name.Contains("List") || atributo.FieldType.Name.StartsWith("_"))
                            {
                                //|| atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion"))
                                continue; // se ignoran las listas de objetos relacionados y los objetos relacionados
                            }
                            consulta += atributo.Name + ", ";
                        }
                        consulta  = consulta.Substring(0, consulta.Length - 2);
                        consulta += ") values(";
                        foreach (FieldInfo atributo in atributos)
                        {
                            if (atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion") || atributo.Name.Equals("estaDeshabilitado"))
                            {
                            }
                            else if (!atributo.Name.StartsWith("_") || atributo.FieldType.Name.Contains("List") || atributo.FieldType.Name.StartsWith("_"))
                            {
                                continue; // se ignoran las listas de objetos relacionados y los objetos relacionados
                            }
                            Object valorAtributo = atributo.GetValue(this);
                            if (valorAtributo != null)
                            {
                                consulta += "@" + atributo.Name + ", ";
                                valores.Add(valorAtributo);
                            }
                            else
                            {
                                consulta += "NULL, ";
                            }
                        }
                        consulta  = consulta.Substring(0, consulta.Length - 2);
                        consulta += "); select IDENT_CURRENT ('" + tipo.Name + "');";
                    }

                    DataTable dt = DBAccesoOBJ.EjecutarConsulta(consulta, valores);
                    id = Convert.ToInt64(dt.Rows[0][0]);
                    //Log.EscribirLog(consulta);
                }
                if (AtributosCargadosPorPropiedad.Count > 0)
                {
                    String        consulta2 = "update " + tipo.Name + " set ";
                    List <Object> valores2  = new List <object>();
                    List <String> temp      = new List <string>();
                    temp.AddRange(AtributosCargadosPorPropiedad);
                    Boolean guardoRElaciondo = false;
                    foreach (String atributo in temp)
                    {
                        FieldInfo atrib = tipo.GetField(atributo, BindingFlags.Instance | BindingFlags.NonPublic);
                        if (atrib.FieldType.Name.StartsWith("_"))//si entra entonces es un objeto relacionado y se tiene q considerar
                        {
                            FieldInfo  campo  = this.GetType().GetField(atributo, BindingFlags.NonPublic | BindingFlags.Instance);
                            ObjetoBase objRel = (ObjetoBase)campo.GetValue(this);
                            if (esModificado)
                            {
                                if (objRel != null)
                                {
                                    AtributosCargadosPorPropiedad.Remove(atributo);
                                    long idRel = objRel.id;
                                    if (objRel.esModificado)
                                    {
                                        objRel.DBAccesoOBJ = DBAccesoOBJ;
                                        objRel.manejador   = manejador;
                                        idRel = objRel.Guardar();
                                    }
                                    if (idRel != 0)
                                    {
                                        guardoRElaciondo = true;
                                        consulta2       += atributo + " = @" + atributo + ", ";
                                        valores2.Add(idRel);
                                    }
                                }
                                else
                                {
                                    guardoRElaciondo = true;
                                    AtributosCargadosPorPropiedad.Remove(atributo);
                                    consulta2 += atributo + " = NULL, ";
                                }
                            }
                            else
                            {
                                AtributosCargadosPorPropiedad.Remove(atributo);
                            }
                        }
                    }
                    if (guardoRElaciondo)
                    {
                        consulta2  = consulta2.Substring(0, consulta2.Length - 2);
                        consulta2 += " where id = @id";
                        valores2.Add(id);
                        DBAccesoOBJ.EjecutarConsulta(consulta2, valores2);
                        //Log.EscribirLog(consulta2);
                    }
                }
                this.esModificado = false;

                if (AtributosCargadosPorPropiedad.Count > 0)
                {
                    List <Object> valores2 = new List <object>();
                    List <String> temp     = new List <string>();
                    temp.AddRange(AtributosCargadosPorPropiedad);
                    foreach (String atributo in temp)
                    {
                        FieldInfo atrib = tipo.GetField(atributo, BindingFlags.Instance | BindingFlags.NonPublic);
                        if (atrib.FieldType.Name.Contains("List"))//si entra entonces es una lista relacionada y se tiene q considerar
                        {
                            AtributosCargadosPorPropiedad.Remove(atributo);

                            String nombreTabla         = tipo.Name + "_X_" + atrib.FieldType.GetGenericArguments()[0].Name + "_" + atrib.Name;
                            String eliminacionConsulta = "delete " + nombreTabla + " where _contenedor = @id";
                            dbAcceso.EjecutarConsulta(eliminacionConsulta, new List <object>()
                            {
                                id
                            });
                            //Log.EscribirLog(eliminacionConsulta);
                            IList listaObjetos = (IList)atrib.GetValue(this);
                            if (listaObjetos != null)
                            {
                                foreach (ObjetoBase objBaseLista in listaObjetos)
                                {
                                    long idTempLista = objBaseLista.id;
                                    if (objBaseLista.esModificado)
                                    {
                                        objBaseLista.DBAccesoOBJ = this.DBAccesoOBJ;
                                        objBaseLista.Manejador   = manejador;
                                        idTempLista = objBaseLista.Guardar();
                                    }
                                    String consultaAgregadoRelacionado = "insert " + nombreTabla + " (_contenedor,_contenido,_fecha) values(@_contenedor, @_contenido, @_fecha);";
                                    dbAcceso.EjecutarConsulta(consultaAgregadoRelacionado, new List <object>()
                                    {
                                        id, idTempLista, DateTime.Now
                                    });
                                    //Log.EscribirLog(consultaAgregadoRelacionado);
                                }
                            }
                        }
                    }
                }
                return(id);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }