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.
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(MovableButton clickedButton)
{
Forms.Sig.SigForm sigForm = (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<(string s_id, string s_image)> list = Api.Zselect<(string s_id, string s_image)>(Globals.RepData, reqSql);
if (list != null)
{
using (MercatorSqlConnection conn = new MercatorSqlConnection(Globals.RepData, true))
{
if (conn.Connection == null)
return;
Progress.ProgressCreate(list.Count);
int i = 0;
bool err = false;
using (SqlCommand cmd = new SqlCommand("update STOCK set s_imagebin=@img where s_id=@s_id", conn.Connection))
{
foreach ((string s_id, string s_image) tuple in list)
{
i++;
Progress.ProgressIncrement(1);
Wait.WaitStatic.WaitWindow("Update Images : " + i + " / " + list.Count);
string imagePath = Globals.RepData + "IMAGES\\" + tuple.s_image;
if (File.Exists(imagePath))
{
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@img", SqlDbType.Image)).Value = File.ReadAllBytes(imagePath);
cmd.Parameters.Add(new SqlParameter("@s_id", SqlDbType.Char)).Value = tuple.s_id;
if (!Api.SqlExec(Globals.RepData, cmd))
{
err = true;
break;
}
}
}
}
Progress.ProgressDestroy();
Wait.WaitStatic.WaitClear();
if (!err)
Dialogs.Stop("OK !");
}
}
}
}
}