www.bewise.fr

Recherche

Remplir un champ varbinary(max) avec des fichiers d'un répertoire

Par L'équipe Bewise, posté le 12/07/2010

Petit challenge personnel: il y a quelques jours, on me demande comment mettre le contenu d'un répertoire dans une table, en base de données (pour préparer une démo à la BDC).

SET MODE_MAUVAISE_FOI ON

Evidemment, étant entouré de développeurs, tout le monde pense à une application console avec de l'Entity Framework ou du Linq2SQL. Mais le temps de se décider, j'avais implémenté la solution avec SSIS, outil parfaitement adapté pour l'intégration de données ;).

SET MODE_MAUVAISE_FOI OFF

La piste suivie est une tâche de DataFlow qui s'appelle Import Column qui sert à injecter des fichiers dans un flux de données.

clip_image002

Pour le faire fonctionner, il nous faut dans le flux d'entrée une colonne avec le nom du fichier. Donc ma première tâche dans le Control Flow est de remplir une table avec les chemins complets. Pour cela, j'utilise un Foreach Loop qui itère sur les fichiers du répertoire et fait un Insert SQL.

clip_image004

Ensuite, dans le DataFlow Task, je récupère ces noms de fichiers, je les envoie dans la tâche Import Column et j'enregistre cela dans ma base avec une Destination SQL.

Petit truc pour configurer le composant Import Column (qui n'est pas du tout intuitif), il faut :

· Créer manuellement l'Output Column qui va recevoir le binaire. Elle se mettra automatiquement au bon type (DT_IMAGE, l'ancien nom de varbinary(max) :()

· Récupérer l'ID de cette colonne

clip_image006

· Lier cette ID à la colonne d'entrée

clip_image008

Et voilà, une fois ce tips connu, tout est OK, vous obtenez un lot pour intégrer des fichiers dans une base très rapidement.

Temps de dev : 5 minutes

Le code source est disponible sur demande.

PS : il faut juste avoir une instance SSIS sur la machine qui exécutera le package.


Commentaires