Image en SQL Server

Documentation – Traitement d’image en Base64 avec WinDev & SQL Server

Traitement d’images en Base64 avec WinDev et SQL Server

Cette documentation détaille deux segments de code WinDev utilisés pour :

  • Encoder une image locale en Base64 puis l’insérer dans une base SQL Server
  • Lire cette image encodée, la décoder, puis l’afficher via un champ image

1. Code d’insertion dans la base

sFichier est une chaîne = "C:\Users\dj\Pictures\Jardin 01.jpg"
bufTMP est un Buffer
sTMP est une chaîne ANSI

bufTMP = fChargeBuffer(sFichier)
sTMP = Encode(bufTMP, encodeBASE64SansRC)

sNomReq est une chaîne = "REQ"
sTmpSQL est une chaîne = [
  INSERT INTO LATEUtilisateur (image_signature)
  VALUES (convert(varchar(max), '[%sTMP%]'))
]

SI PAS SQLExec(sTmpSQL, sNomReq) ALORS
  SQLErreur(sTmpSQL, sNomReq)
FIN
SQLFerme(sNomReq)

Explication : Ce code charge une image locale, l’encode en Base64, puis l’insère dans une base SQL Server en tant que texte.

Remarques :

  • Le champ image_signature est défini en nvarchar(max).
  • Le contenu encodé est inséré sous forme de chaîne texte (Base64).
  • Le code utilise convert(varchar(max), ...) dans la requête.

2. Code de lecture depuis la base

bufTMP est un Buffer
sTMP est une chaîne ANSI

sNomReq est une chaîne = "REQ"
sTmpSQL est une chaîne = [
  SELECT image_signature FROM LATEUtilisateur
  WHERE ref_utilisateur = 35
]

SI SQLExec(sTmpSQL, sNomReq) ALORS
  SQLAvance(sNomReq)
  sTMP = SQLLitMémoTexte(sNomReq, 1)
  bufTMP = Décode(sTMP, encodeBASE64SansRC)
SINON
  SQLErreur(sTmpSQL, sNomReq)
FIN
SQLFerme(sNomReq)

IMG_TEST = bufTMP

Explication : Ce code lit la chaîne Base64 depuis le champ image_signature, la décode et affecte le buffer à un champ image (IMG_TEST).

3. Points importants

Encodage et Types

  • Base64 ajoute environ 33% de taille à l’image d’origine.
  • Le champ nvarchar(max) double la taille car UTF-16 (Unicode).
  • WinDev envoie probablement les chaînes encodées comme Unicode → varchar(max) échoue.

Nom de colonne signature

  • signature est un mot réservé dans SQL Server.
  • Utiliser des crochets : [signature], ou renommer la colonne (ex : image_signature).

4. Recommandations

  • Utiliser des requêtes paramétrées si possible pour éviter les injections.
  • Préférer varbinary(max) pour stocker l’image sans encodage, si compatible.
  • Continuer avec nvarchar(max) si c’est le seul format qui fonctionne avec WinDev.