Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Charger les images dans la base de données SQL

0000002132     -      29/09/2017

Cette programmation montre un exemple de module permettant de récupérer les images sauvées "en URL" (dans un champ de type caractère) et de les charger dans la base de données SQL (dans un champ de type image) pour tous les articles.

Ce module est appelé à partir d'un bouton ajouté dans la fiche article.

Si un filtre est appliqué, celui-ci est pris en compte.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using MercatorApi;
using MercatorController;
using System.IO;
using MercatorUi;
using System.Windows.Forms;
using System.Drawing;


namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {
        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)clickedButton.Form;
            string reqSql = "select s_id,s_image from STOCK where (s_image<>'')";
            if (!string.IsNullOrWhiteSpace(sigForm.Filter))
                reqSql += " and (" + sigForm.Filter + ")";
            List<DataImage> l = Api.Zselect<DataImage>(MercatorUi.Globals.RepData, reqSql);
            if (l != null)
            {
                using (MercatorSqlConnection conn = new MercatorSqlConnection(Globals.RepData, true))
                {
                    if (conn.Connection == null)
                        return;

                    MercatorUi.Progress.ProgressCreate(l.Count);
                    int i = 0;
                    bool err = false;
                    foreach (DataImage di in l)
                    {
                        i++;
                        MercatorUi.Progress.ProgressIncrement(1);
                        MercatorUi.Wait.WaitStatic.WaitWindow("Update Images : " + i + " / " + l.Count);
                        string imagePath = MercatorUi.Globals.RepData + "IMAGES\\" + di.s_image;
                        if (File.Exists(imagePath))
                        {
                            using (System.IO.FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
                            using (System.IO.MemoryStream ms = new MemoryStream())
                            {
                                Image img = Image.FromStream(fs);
                                img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                                using (SqlCommand cmd = new SqlCommand("update STOCK set s_imagebin=@img where s_id=@s_id", conn.Connection))
                                {

                                    cmd.CommandTimeout = 900;
                                    cmd.Parameters.Add(new SqlParameter("@img", SqlDbType.Image)).Value = ms.ToArray();
                                    cmd.Parameters.Add(new SqlParameter("@s_id", SqlDbType.Char)).Value = di.s_id;
                                    if (!Api.SqlExec(Globals.RepData, cmd))
                                    {
                                        err = true;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    conn.Connection.Close();
                    MercatorUi.Progress.ProgressDestroy();
                    MercatorUi.Wait.WaitStatic.WaitClear();
                    if (!err)
                        Dialogs.Stop("OK !");
                }
            }
        }

        public class DataImage
        {
            public string s_id { get; set; }
            public string s_image { get; set; }
        }
    }
}