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

Annexe 1 : Utiliser WinForm Data Binding avec des BLOB

Tech - Par Renaud ROSSET - 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 cette ressource

Guide de technologie 5G pour l’entreprise

Guide de technologie 5G pour l’entreprise

Pourquoi la 5G est-elle faite pour votre entreprise ? La 5G peut améliorer la vitesse, la fiabilité et la capacité de votre réseau, permettant ainsi une meilleure collaboration, une productivité accrue et une prise de décision plus rapide. Notre livre blanc " The Big Book of Enterprise 5G" vous fournit les informations stratégiques dont vous avez besoin pour prendre des décisions éclairées et préparer votre entreprise à prospérer dans l'ère de la 5G. Cradlepoint, part of Ericsson est le leader mondial des solutions de réseau sans fil 4G LTE et 5G fournies via le cloud. Connectez vos employés, lieux et objets avec la 4G LTE et la 5G pour un WAN sans fil d'entreprise.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010