> Tech > Je t’aurai, mon BLOB

Je t’aurai, mon BLOB

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

L'utilisation du SqlDataReader pour lire des données BLOB vous permet d'accéder à  celles qui se trouvent déjà  dans la base de données SQL Server. Mais, pour lire des données BLOB, il faut d'abord mettre dans la base de données les données provenant du système de fichiers. Voyons comment utiliser ADO.NET

Je t’aurai, mon BLOB

pour importer des données
BLOB dans SQL Server. La sous-routine
BLOBDataSetImport du listing 2
montre comment écrire des données
BLOB dans une base de données SQL
Server en utilisant l’objet ADO.NET
DataSet.
La sous-routine du listing 2 importe
le contenu d’un fichier dans la colonne
blob_object de la table BLOBTable
exemple. Comme dans l’exemple précédent,
il faut d’abord importer le namespace
.NET System. IO dans votre
application pour permettre l’accès au
système de fichiers. La sous-routine
BLOBDataSetImport commence par
créer une instance d’un objet SqlConnection
nommée cn dont la propriété
ConnectionString est l’argument du
constructeur. L’instruction suivante
crée un objet SqlDataAdapter nommé
da. Le job du SqlDataAdapter est essentiellement
de connecter un DataSet à 
une source de données SQL Server. Le
constructeur de SqlDataAdapter prend
deux arguments. Le premier est une
instruction SELECT qui définit les données
que vous voulez utiliser dans le
DataSet et le second argument est l’objet
cn SqlConnection.
L’instruction suivante du code crée
un objet SqlCommandBuilder nommé
cb et prend comme un argument l’objet
SqlDataAdapter da. J’utilise l’objet
SqlDataBuilder dans le listing 2 pour
créer les commandes INSERT, UPDATE
et DELETE appropriées pour l’instruction
SELECT spécifiée dans le
SqlDataAdapter. SQL Server stocke ces
commandes dans les propriétés Insert-
Command, UpdateCommand et DeleteCommand
de SqlDataAdapter. Le
code crée ensuite un DataSet vide
nommé ds qu’il peuplera avec les résultats
de la requête SELECT.
Ensuite, la sous-routine crée un objet
FileStream appelé fs que vous définissez
avec le filename, la méthode
open et la méthode access pour l’ouverture
et qui fonctionne avec le fichier
que vous avez spécifié dans les propriétés
Text d’une boîte de texte, nommé
txtImportBLOBFile. Le flag FileMode.
OpenOrCreate indique que si le fichier
existe, l’objet FileStream l’ouvrira.
Sinon, il le créera. Le flag FileAccess.
Read indique que la sous-routine ouvrira
le fichier pour lecture. Au renvoi
du listing 2, on voit la première section
importante du code pour traiter des objets
BLOB quand vous utilisez le
DataSet. Premièrement, le code définit
une matrice d’octets (qui stockera temporairement
les données renvoyées)
d’après la longueur de l’objet fs
FileStream. Ensuite, un bloc Try démarre
et la méthode Read de l’objet
FileStream lit le contenu du fichier dans
la matrice d’octets bBLOB Storage Byte.
Après avoir lu toutes les données dans
la matrice d’octets, la sous-routine
ferme l’objet FileStream. Ensuite le
code ouvre l’objet ADO.NET SqlConnection
et remplit le DataSet en utilisant
la méthode Fill de SqlDataAdapter.
Après quoi, le code instancie un nouvel
objet DataRow nommé rw, appelle la
méthode NewRow de la DataTable pour
créer un enregistrement vide dans la
DataTable BLOBTable et renvoie un
nouvel objet DataRow.
La section de code importante suivante
se trouve au renvoi B, où j’attribue
à  la colonne blob_filename le nom
texte du fichier qui a été importé ; j’attribue
aussi à  la colonne blob_object la
matrice d’octets qui contient l’information
binaire que la sous-routine lit à  partir
du système de fichiers. A ce stade,
l’objet rw DataRow contient le texte et
les données binaires que vous voulez
insérer dans la base de données SQL
Server, et vous devez ajouter le
DataRow à  la collection Rows de la table
en utilisant la méthode Add de l’objet
DataRow. Enfin, la sous-routine appelle
la méthode Update du SqlDataAdapter,
qui évalue les changements apportés à 
la DataTable dans le DataSet et détermine
quelles commandes exécuter.
Dans ce cas, la propriété Table.
Rows.RowState de DataTable contient
la valeur Added, qui indique qu’une
nouvelle ligne a été insérée. Le
DataAdapter utilise la propriété Row-
State pour déterminer l’action à  mener
quand la méthode Update s’exécute.
Comme la valeur de Added dans la
propriété RowState montre qu’une
ligne a été ajoutée à  la DataTable, le
DataAdapter doit exécuter son Insert-
Command interne pour ajouter le nouvel
enregistrement à  la table BLOBTable.
Le bloc Finally du listing 2
contient tout le code de nettoyage, qui
met les objets de la sous-routine à 
Nothing et ferme l’objet SqlConnection.
Bien que la technique d’importation
BLOB du listing 2 n’utilise que le
code côté client, vous pouvez aussi
combiner une procédure stockée côté
serveur avec l’objet ADO.NET SqlCommand
pour importer des données
BLOB dans une base de données SQL
Server. L’encadré « Utiliser l’objet
SqlCommand pour importer des
BLOB » décrit cette autre technique.

Téléchargez cette ressource

Guide des solutions de cloud & services managés simplifiés

Guide des solutions de cloud & services managés simplifiés

A la fois cloud provider et ESN, le groupe ACESI s’appuie sur les technologies VMware pour apporter toute la richesse du cloud dans des environnements hybrides. Découvrez, dans ce guide thématique, les bonnes pratiques pour répondre aux défis de simplification du Cloud.

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