> Tech > Annexe 1 : Utiliser WinForm Data Binding avec des BLOB

Annexe 1 : Utiliser WinForm Data Binding avec des BLOB

Tech - Par iTPro - Publié le 24 juin 2010
email

Si vous utilisez ADO.NET depuis un certain temps, vous croyez peut-être qu'il est impossible d'utiliser WinForm data binding avec des BLOB. Bien que .NET permette d'effectuer le data binding avec WebForms, il ne permet pas d'utiliser WinForms pour effectuer le data binding avec la plupart des contrôles standard comme Picture

Annexe 1 : Utiliser WinForm Data Binding avec des BLOB

Box. Mais il existe un contournement
pour combiner les données BLOB dans
votre base de données SQL Server avec
les contrôles d’image sur .NET
WinForms. La technique en question
n’est pas aussi commode que Web-
Forms data binding, mais elle vous permet
de prendre des données binaires
directement dans un DataSet et de les
canaliser vers un contrôle graphique
comme Picture Box sans utiliser un fichier
disque intermédiaire. L’objet
ADO.NET MemoryStream permet cela.
Voyons comment écrire un objet
BLOB dans un flux mémoire puis
attribuer cet objet MemoryStream
directement à  la propriété image d’un
contrôle Picture Box sans d’abord
écrire l’image binaire sur disque. Cette
technique peut améliorer la performance
en évitant l’I/O supplémentaire
requis pour écrire d’abord, puis lire, les
données binaires sur disque. A noter
que cette technique n’est pas la
meilleure pour de grands objets BLOB.
En effet, certains d’entre eux peuvent
atteindre 2 Go et toute tentative de les
mettre en mémoire pénalisera durement
les ressources du système. Mais,
pour de petits objets, du genre photo,
cette méthode convient parfaitement.
Comme la sous-routine du listing A
utilise un flux mémoire pour stocker
les données binaires, vous devez importer
le namespace .NET System.IO
dans votre application pour permettre
l’accès au système de fichiers. Pour importer
le namespace .NET System.IO,
ajoutez le code suivant au projet :

Imports System.IO

La sous-routine BLOB2PictureBox
du listing A commence par créer un
nouvel objet SqlConnection nommé cn
et un nouvel objet DataAdapter nommé
da. Le code du listing A construit le
DataAdapter en utilisant une instruction
SELECT qui extrait la colonne
blob_object de la table BLOBTable
dans laquelle la valeur de la colonne
blob_id est 1. Ensuite, le code crée un
objet SqlCommandBuilder et un
DataSet vide et utilise un bloc Try pour
ouvrir la connexion et pour utiliser la
méthode Fill de SqlDataAdapter pour
peupler le DataSet. Le code évalue la
propriété Row Count de la DataTable
BLOBTable pour s’assurer que certaines
données ont été extraites.
Ensuite, la véritable action commence
au renvoi A du listing A.
Premièrement, le code du renvoi A
crée une matrice d’octets (Byte array)
appelée bBLOBStorage et attribue le
contenu de l’image binaire qui se
trouve dans la colonne blob_object du
DataSet à  la matrice d’octets. Le code
crée un nouvel objet MemoryStream
nommé ms et attribue le contenu de la
matrice d’octets bBLOBStorage.
Ensuite, la méthode FromStream du
contrôle Picture Box attribue les données
d’image binaires qui se trouvent
dans l’objet ms MemoryStream à  la
propriété Image du contrôle Picture
Box. La figure A montre le résultat de
la sous-routine BLOB2PictureBox.

Téléchargez gratuitement cette ressource

Guide de Services Cloud Managés

Guide de Services Cloud Managés

Accélérer votre transformation digitale, protéger et sécuriser vos environnements Cloud avec les offres de support, d'accompagnement et de services managés. Découvrez le TOP 3 des Services Managés pour accompagner la transformation de vos environnements Cloud, gagner en agilité et en sécurité dans un monde d'incertitudes.

Tech - Par iTPro - Publié le 24 juin 2010