public static void DeleteGifs(ref MySQLData oDataBase)
        {
            string SQLNonQuery = "DELETE FROM gifs_animados ";

            oDataBase.ClearParameters();
            oDataBase.ExecuteNonQuery(SQLNonQuery);
        }
        public static void SetMaxAllowedPacketSession(ref MySQLData oDataBase)
        {
            string SQLNonQuery = "SET SESSION max_allowed_packet=1024*1024*1024";

            oDataBase.ClearParameters();
            oDataBase.ExecuteNonQuery(SQLNonQuery);
        }
        public static int SelectCountGif(ref MySQLData oDataBase)
        {
            string SQLQuery = "SELECT COUNT(*) FROM gifs_animados";
            object oData    = oDataBase.ExecuteScalar(SQLQuery);
            int    Count    = int.Parse(oData.ToString());

            return(Count);
        }
        public static int UpdateGifs_ResetNumAccesos(ref MySQLData oDataBase)
        {
            string SQLNonQuery = "UPDATE gifs_animados SET num_accesos = 0 ";

            oDataBase.ClearParameters();
            int n = oDataBase.ExecuteNonQuery(SQLNonQuery);

            return(n);
        }
        public static void UpdateContadorGif(ref MySQLData oDataBase, int Id)
        {
            string SQLNonQuery = "UPDATE gifs_animados ";

            SQLNonQuery += "SET num_accesos = num_accesos + 1 ";
            SQLNonQuery += "WHERE Id = ?Id ";
            oDataBase.ClearParameters();
            oDataBase.AddParameter("Id", Id);
            oDataBase.ExecuteNonQuery(SQLNonQuery);
        }
        public static void InsertGif(ref MySQLData oDataBase, int Id, Byte[] imgByte, string nombrearchivo)
        {
            string SQLNonQuery = "INSERT INTO gifs_animados(Id,archivo,nombrearchivo,num_accesos) ";

            SQLNonQuery += "VALUES(?Id, ?archivo, ?nombrearchivo, 0) ";
            oDataBase.ClearParameters();
            oDataBase.AddParameter("Id", Id);
            oDataBase.AddParameter("archivo", imgByte);
            oDataBase.AddParameter("nombrearchivo", nombrearchivo);
            oDataBase.ExecuteNonQuery(SQLNonQuery);
        }
        public static DataSet SelectTop10Gifs(ref MySQLData oDataBase)
        {
            string SQLQuery = "SELECT Id,nombrearchivo,archivo,num_accesos ";

            SQLQuery += "FROM gifs_animados ";
            SQLQuery += "ORDER BY num_accesos desc ";
            SQLQuery += "LIMIT 10 ";
            oDataBase.ClearParameters();
            DataSet ds = oDataBase.SelectDataSetFrom(SQLQuery);

            return(ds);
        }
        public RespuestaMetodoTop10Gifs SelectTop10GifsDB()
        {
            Log             objLog    = new Log();
            string          Codigo    = "000";
            string          Mensaje   = "OK";
            List <GifImage> Imagenes  = new List <GifImage>();
            MySQLData       oDataBase = new MySQLData();

            try
            {
                oDataBase.Open();
                DataSet dsDatos = Data.SelectTop10Gifs(ref oDataBase);
                if (dsDatos.Tables.Count > 0)
                {
                    DataTable tbl = dsDatos.Tables[0];
                    foreach (DataRow Registro in tbl.Rows)
                    {
                        int      Id            = int.Parse(Registro["Id"].ToString());
                        int      num_accesos   = int.Parse(Registro["num_accesos"].ToString());
                        string   nombrearchivo = Registro["nombrearchivo"].ToString();
                        byte[]   archivo       = (byte[])Registro["archivo"];
                        GifImage Imagen        = new GifImage();
                        Imagen.Id         = Id;
                        Imagen.NumAccesos = num_accesos;
                        Imagen.Nombre     = nombrearchivo;
                        Imagen.Imagen     = archivo;
                        Imagenes.Add(Imagen);
                    }
                }
            }
            catch (Exception exc)
            {
                Codigo  = "999";
                Mensaje = String.Format("Error.  Detalles: {0}", exc.Message);
            }

            oDataBase.Close();

            RespuestaMetodoTop10Gifs Respuesta = new RespuestaMetodoTop10Gifs();

            Respuesta.CodigoRetorno  = Codigo;
            Respuesta.MensajeRetorno = Mensaje;
            Respuesta.Imagenes       = Imagenes;

            LogSelectTop10Gifs(objLog, Respuesta);

            return(Respuesta);
        }
        // Aumenta los contadores de manera aleatoria
        public int[] SimularAccesoGifs(int NumeroClientes)
        {
            Log objLog     = new Log();
            int NumeroGifs = 0;

            int[]     Accesos   = new int[NumeroGifs];
            Random    rnd       = new Random();
            MySQLData oDataBase = new MySQLData();

            try
            {
                oDataBase.Open();
                NumeroGifs = Data.SelectCountGif(ref oDataBase);
                Accesos    = new int[NumeroGifs];
                for (int j = 0; j < NumeroGifs; j++)
                {
                    Accesos[j] = 0;
                }
                for (int i = 0; i < NumeroClientes; i++)
                {
                    // IndiceGifGenerado >= 1 and < NumeroGifs + 1
                    int IndiceGifGenerado = rnd.Next(1, NumeroGifs + 1);
                    Accesos[IndiceGifGenerado - 1] = Accesos[IndiceGifGenerado - 1] + 1;
                }
                for (int j = 0; j < NumeroGifs; j++)
                {
                    int n  = Accesos[j];
                    int Id = j + 1;
                    for (int k = 0; k < n; k++)
                    {
                        Data.UpdateContadorGif(ref oDataBase, Id);
                    }
                }
            }
            catch (Exception exc)
            {
                string Error = exc.Message;
            }

            oDataBase.Close();

            LogSimularAccesoGifs(objLog, Accesos);

            return(Accesos);
        }
        // Carpeta -> Base de Datos
        public string[] SaveGifs()
        {
            Log       objLog        = new Log();
            string    Codigo        = "000";
            string    Mensaje       = "OK";
            MySQLData oDataBase     = new MySQLData();
            string    GifExportPath = ConfigurationManager.AppSettings["GifExportPath"];
            int       i             = 0;
            int       IndiceInsert  = 0;
            int       n             = 0;

            try
            {
                oDataBase.Open();
                string[] Archivos = Directory.GetFiles(GifExportPath, "*.gif");
                n = Archivos.Length;
                if (n > 0)
                {
                    Data.DeleteGifs(ref oDataBase);
                }
                foreach (string Archivo in Archivos)
                {
                    i++;
                    string NombreArchivo = Path.GetFileName(Archivo);
                    Image  img           = Image.FromFile(Archivo);
                    Byte[] imgByte       = ImageToStream(img);
                    bool   GifLeido      = imgByte.Length > 0;
                    if (GifLeido)
                    {
                        Data.InsertGif(ref oDataBase, i, imgByte, NombreArchivo);
                        IndiceInsert++;
                    }
                }
            }
            catch (Exception exc)
            {
                Codigo  = "999";
                Mensaje = String.Format("Error.  Detalles: {0}", exc.Message);
            }

            oDataBase.Close();

            string[] Respuesta = new string[] { Codigo, Mensaje, n.ToString(), IndiceInsert.ToString() };
            return(Respuesta);
        }
        public string[] ResetAccesosGifs()
        {
            Log       objLog    = new Log();
            string    Codigo    = "000";
            string    Mensaje   = "OK";
            MySQLData oDataBase = new MySQLData();
            int       n         = 0;

            try
            {
                oDataBase.Open();
                n = Data.UpdateGifs_ResetNumAccesos(ref oDataBase);
            }
            catch (Exception exc)
            {
                Codigo  = "999";
                Mensaje = String.Format("Error.  Detalles: {0}", exc.Message);
            }

            oDataBase.Close();

            string[] Respuesta = new string[] { Codigo, Mensaje, String.Format("{0} Registro(s) reseteado(s)", n) };
            return(Respuesta);
        }