예제 #1
0
        /// <summary>
        /// Elimina un Regitro, solo es necesario llenar la entidad con el ID a eliminar
        /// </summary>
        /// <typeparam name="T">Objeto entidad (clase)</typeparam>
        /// <param name="objeto">Etnidad</param>
        /// <returns>Mayor a cero</returns>
        public int Delete <T>(T objeto)
        {
            ObjetoTransformar obj = ProcesarEntidad(objeto.GetType());

            //para el caso del patrick, este id no se puede determinar
            //por lo tanto se tomará el primer ordinal con el elemento id
            string idEntidad = "";

            if (obj.ListaCampos != null && obj.ListaCampos.Count > 0)
            {
                idEntidad = obj.ListaCampos[0].NombreColumna;
            }


            int  filasAfectadas = 0;
            Type tipo           = objeto.GetType();
            var  propiedades    = tipo.GetProperties();

            for (int i = 0; i < propiedades.Length; i++)
            {
                if (propiedades[i].Name != "Nuevo" &&
                    propiedades[i].Name != "Borrado" && propiedades[i].Name != "Modificado" && propiedades[i].Name != "TimeStamp")
                {
                    object      valor = propiedades[i].GetValue(objeto, null);
                    CamposTabla campo = obj.ListaCampos.Find(p => p.NombreEntidad == propiedades[i].Name);
                    if (campo != null)
                    {
                        campo.ValorEntidad = valor;
                    }
                }
            }
            int valorId = int.Parse(obj.ListaCampos.Find(p => p.NombreColumna == "ID").ValorEntidad.ToString());

            string conString = WebConfigurationManager.
                               ConnectionStrings[Utiles.CNS].ConnectionString;

            using (OdbcConnection con = new OdbcConnection(conString))
                using (OdbcCommand cmd = new OdbcCommand(string.Format("DELETE FROM {0} WHERE {1} = {2}", obj.NombreTabla, idEntidad, valorId), con))
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                    filasAfectadas++;
                    con.Close();
                }

            return(filasAfectadas);
        }
예제 #2
0
        private OdbcType ObtenerTipoODBC(CamposTabla campo)
        {
            OdbcType retorno = OdbcType.Int;

            switch (campo.TipoDatoEntidad)
            {
            case "System.Int32":
                retorno = OdbcType.Int;
                break;

            case "System.String":
                retorno = OdbcType.VarChar;
                break;

            case "System.DateTime":
                retorno = OdbcType.DateTime;
                break;
            }

            return(retorno);
        }
예제 #3
0
        /// <summary>
        /// Inserta un Regitro
        /// </summary>
        /// <typeparam name="T">Objeto entidad (clase)</typeparam>
        /// <param name="objeto">Etnidad</param>
        /// <returns>Mayor a cero</returns>
        public int Insertar <T>(T objeto)
        {
            long ultimoId         = 0;
            ObjetoTransformar obj = ProcesarEntidad(objeto.GetType());

            int  filasAfectadas = 0;
            Type tipo           = objeto.GetType();
            var  propiedades    = tipo.GetProperties();
            var  campos         = new StringBuilder();
            var  variables      = new StringBuilder();

            for (int i = 0; i < propiedades.Length; i++)
            {
                if (propiedades[i].Name != "Nuevo" &&
                    propiedades[i].Name != "Borrado" && propiedades[i].Name != "Modificado" && propiedades[i].Name != "TimeStamp")
                {
                    object      valor = propiedades[i].GetValue(objeto, null);
                    CamposTabla campo = obj.ListaCampos.Find(p => p.NombreEntidad == propiedades[i].Name);
                    if (campo != null)
                    {
                        campo.ValorEntidad = valor;
                    }
                }
            }
            if (obj.ListaCampos.Count > 0)
            {
                for (int i = 0; i < obj.ListaCampos.Count; i++)
                {
                    string nombreCampo = obj.ListaCampos[i].NombreColumna;
                    if (nombreCampo != "ID")
                    {
                        campos.Append(obj.ListaCampos[i].NombreColumna);
                        variables.Append("?");
                        if (i < obj.ListaCampos.Count - 1)
                        {
                            campos.Append(", ");
                            variables.Append(", ");
                        }
                    }
                }
            }

            //en este momento ya tenemos los valores de los elementos y la lista de elementos en sql
            string conString = WebConfigurationManager.
                               ConnectionStrings[Utiles.CNS].ConnectionString;

            using (OdbcConnection con = new OdbcConnection(conString))
                using (OdbcCommand cmd = new OdbcCommand(string.Format("INSERT INTO {0} ({1}) VALUES ({2})", obj.NombreTabla, campos, variables), con))
                {
                    con.Open();

                    foreach (CamposTabla campo in obj.ListaCampos)
                    {
                        if (campo.NombreColumna != "ID")
                        {
                            cmd.Parameters.Add("@" + campo.NombreColumna, ObtenerTipoODBC(campo)).Value = campo.ValorEntidad;
                        }
                    }

                    cmd.ExecuteNonQuery();
                    //pruebas de last insert id
                    cmd.CommandText = "SELECT LAST_INSERT_ID()";
                    OdbcDataReader reader = cmd.ExecuteReader();
                    if (reader != null && reader.Read())
                    {
                        ultimoId = reader.GetInt64(0);
                    }

                    filasAfectadas++;
                    con.Close();
                }


            return(Convert.ToInt32(ultimoId));
        }
예제 #4
0
        private List <CamposTabla> ListaCamposTabla(string nombreTabla)
        {
            List <CamposTabla> lista = new List <CamposTabla>();

            StringBuilder sb        = new StringBuilder();
            string        conString = WebConfigurationManager.
                                      ConnectionStrings[Utiles.CNS].ConnectionString;

            //if (fileContents == null)
            //{

            try
            {
                using (OdbcConnection con = new OdbcConnection(conString))
                    using (OdbcCommand cmd =
                               new OdbcCommand("SELECT distinct column_name,  ordinal_position, data_type, CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS where table_name ='" + nombreTabla + "'", con))
                    {
                        con.Open();
                        using (OdbcDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                CamposTabla campo = new CamposTabla();
                                campo.NombreColumna = reader.GetString(0);
                                campo.Ordinal       = int.Parse(reader.GetString(1));
                                campo.TipoDato      = reader.GetString(2);
                                campo.LargoBD       = reader.IsDBNull(3) ? 0 : reader.GetDecimal(3);
                                if (!lista.Exists(p => p.NombreColumna == campo.NombreColumna))
                                {
                                    lista.Add(campo);
                                }
                            }
                        }
                        con.Close();
                    }
                //CacheItemPolicy policy = new CacheItemPolicy();
                //policy.AbsoluteExpiration = tiempoCache;

                //List<string> filePaths = new List<string>();
                //string cacheFilePath = AppDomain.CurrentDomain.BaseDirectory + nombreArchivo;

                //filePaths.Add(cacheFilePath);

                //policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));

                //fileContents = lista;

                //cache.Set("fileContentsCampos", fileContents, policy);
            }
            catch (Exception ex)
            {
                Utiles.Log(ex);
                throw ex;
            }
            //}
            //else
            //{
            //    lista = fileContents;
            //}
            return(lista);
        }
예제 #5
0
        public int Update <T>(T objeto, string nombreIdBD)
        {
            ObjetoTransformar obj = ProcesarEntidad(objeto.GetType());

            int  filasAfectadas = 0;
            Type tipo           = objeto.GetType();
            var  propiedades    = tipo.GetProperties();

            //string nombreIdBD = Utiles.EntregaNombreId(nombreIdPropiedad);

            for (int i = 0; i < propiedades.Length; i++)
            {
                if (propiedades[i].Name != "Nuevo" &&
                    propiedades[i].Name != "Borrado" && propiedades[i].Name != "Modificado" && propiedades[i].Name != "TimeStamp")
                {
                    object      valor = propiedades[i].GetValue(objeto, null);
                    CamposTabla campo = obj.ListaCampos.Find(p => p.NombreEntidad == propiedades[i].Name);
                    if (campo != null)
                    {
                        campo.ValorEntidad = valor;
                    }
                }
            }

            int           valorId = int.Parse(obj.ListaCampos.Find(p => p.NombreColumna == nombreIdBD).ValorEntidad.ToString());
            StringBuilder query   = new StringBuilder();

            query.AppendFormat("UPDATE {0} SET ", obj.NombreTabla);
            foreach (CamposTabla campo in obj.ListaCampos)
            {
                if (campo.NombreColumna != "ID")
                {
                    if (campo.TipoDatoEntidad != "System.Int32")
                    {
                        if (campo.TipoDatoEntidad == "System.DateTime")
                        {
                            query.AppendFormat("{0} = '{1}',", campo.NombreColumna, ConvertirFecha(campo.ValorEntidad));
                        }
                        else
                        {
                            query.AppendFormat("{0} = '{1}',", campo.NombreColumna, campo.ValorEntidad);
                        }
                    }
                    else
                    {
                        query.AppendFormat("{0} = {1},", campo.NombreColumna, campo.ValorEntidad);
                    }
                }
            }
            query.Remove(query.Length - 1, 1).ToString();
            query.AppendFormat(" WHERE {0} = {1}", nombreIdBD, valorId.ToString());


            string conString = WebConfigurationManager.
                               ConnectionStrings[Utiles.CNS].ConnectionString;

            using (OdbcConnection con = new OdbcConnection(conString))
                using (OdbcCommand cmd = new OdbcCommand(query.ToString(), con))
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                    filasAfectadas++;
                    con.Close();
                }


            return(filasAfectadas);
        }
예제 #6
0
        /// <summary>
        /// Actualiza un Regitro
        /// </summary>
        /// <typeparam name="T">Objeto entidad (clase)</typeparam>
        /// <param name="objeto">Etnidad</param>
        /// <returns>Mayor a cero</returns>
        public int Update <T>(T objeto)
        {
            ObjetoTransformar obj = ProcesarEntidad(objeto.GetType());

            //para el caso del patrick, este id no se puede determinar
            //por lo tanto se tomará el primer ordinal con el elemento id
            string idEntidad = "";

            if (obj.ListaCampos != null && obj.ListaCampos.Count > 0)
            {
                idEntidad = obj.ListaCampos[0].NombreColumna;
            }

            int  filasAfectadas = 0;
            Type tipo           = objeto.GetType();
            var  propiedades    = tipo.GetProperties();

            for (int i = 0; i < propiedades.Length; i++)
            {
                if (propiedades[i].Name != "Nuevo" &&
                    propiedades[i].Name != "Borrado" && propiedades[i].Name != "Modificado" && propiedades[i].Name != "TimeStamp")
                {
                    object      valor = propiedades[i].GetValue(objeto, null);
                    CamposTabla campo = obj.ListaCampos.Find(p => p.NombreEntidad == propiedades[i].Name);
                    if (campo != null)
                    {
                        campo.ValorEntidad = valor;
                    }
                }
            }

            int           valorId = int.Parse(obj.ListaCampos.Find(p => p.NombreColumna.Contains("ID")).ValorEntidad.ToString());
            StringBuilder query   = new StringBuilder();

            query.AppendFormat("UPDATE {0} SET ", obj.NombreTabla);
            foreach (CamposTabla campo in obj.ListaCampos)
            {
                if (campo.NombreColumna != "ID")
                {
                    if (campo.TipoDatoEntidad != "System.Int32")
                    {
                        if (campo.TipoDatoEntidad == "System.DateTime")
                        {
                            query.AppendFormat("{0} = '{1}',", campo.NombreColumna, ConvertirFecha(campo.ValorEntidad));
                        }
                        else
                        {
                            query.AppendFormat("{0} = '{1}',", campo.NombreColumna, campo.ValorEntidad);
                        }
                    }
                    else
                    {
                        query.AppendFormat("{0} = {1},", campo.NombreColumna, campo.ValorEntidad);
                    }
                }
            }
            query.Remove(query.Length - 1, 1).ToString();
            query.AppendFormat(" WHERE {0} = {1}", idEntidad, valorId.ToString());


            string conString = WebConfigurationManager.
                               ConnectionStrings[Utiles.CNS].ConnectionString;

            using (OdbcConnection con = new OdbcConnection(conString))
                using (OdbcCommand cmd = new OdbcCommand(query.ToString(), con))
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                    filasAfectadas++;
                    con.Close();
                }


            return(filasAfectadas);
        }