Afbeeldingen laden in de SQL-database

0000002132     -      29-09-2017

Deze programmering levert een voorbeeldmodule waarmee u "in URL" opgeslagen afbeeldingen (in een veld van het tekentype) kunt ophalen en laden in de SQL-database (in een veld van het afbeeldingstype) voor alle artikels.

Deze module wordt geopend via een knop die aan de artikelfiche wordt toegevoegd.

Als er een filter wordt toegepast, wordt daarmee rekening gehouden.

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; }
        }
    }
}