Comment faire pour afficher une image à partir d'une base de données dans un objet PictureBox formulaires Windows à l'aide de Visual Basic .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 321900 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape décrit comment afficher une image qui est stockée dans une base de données dans un contrôle PictureBox sur un formulaire Windows.

Dans Microsoft Visual Basic 6.0, le seul moyen d'afficher une image à partir d'une base de données dans un contrôle PictureBox , sans l'étape intermédiaire d'enregistrer les données d'objet BLOB binary large () Object dans un fichier consiste à lier le contrôle PictureBox à une source de données comme un contrôle de données (ActiveX Data Objects) ou un objet Recordset . Sans liaison de données, vous ne peut pas charger par programme un objet BLOB dans un contrôle sans enregistrer l'image dans un fichier de l'instruction LoadPicture à utiliser.

L'exemple de cet article utilise un tableau d'octets et l'objet MemoryStream de la classe de base System.IO pour copier les données d'image de la base de données directement à partir d'un objet ADO.NET DataSet ou un objet DataReader pour le contrôle PictureBox .

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs sont requis :
  • Microsoft Visual Studio .NET est installé sur un système d'exploitation Microsoft Windows compatible
  • Instance disponible de Microsoft SQL Server ou une base de données Microsoft Access disponible pour le test
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • Les applications Visual Basic .NET Windows Forms
  • Accès aux données ADO.NET
  • Objet BLOB Binary large () Object stockage dans les bases de données

Créer l'exemple de code Visual Basic .NET

  1. Créez une table SQL Server ou d'une table Access avec la structure suivante :
    CREATE TABLE BLOBTest
    (
    BLOBID INT IDENTITY NOT NULL,
    BLOBData IMAGE NOT NULL
    )
    					
  2. Suivez ces étapes pour créer un nouveau Windows de Visual Basic Forms application :
    1. Démarrez Visual Studio .NET.
    2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
    3. Dans la boîte de dialogue Nouveau projet , cliquez sur projets Visual Basic sous types de projet , puis cliquez sur application Windows sous modèles .
  3. Faites glisser un contrôle PictureBox et deux contrôles de bouton de la boîte à outils vers le formulaire par défaut, Form1. Modifier la propriété Name du contrôle PictureBox à picBlob . Définissez la propriété Text de Bouton1 dans un fichier à la base de données et définir la propriété Text de Bouton2 à la base de données à l'objet PictureBox .
  4. Ajoutez les instructions Imports suivantes en haut du module de code de Form1 :
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.IO
    Imports System.Drawing.Imaging
    					
  5. Ajouter la déclaration suivante pour la chaîne de connexion de base de données sous public classe Form1 et ensuite modifier la chaîne de connexion que nécessaire pour votre environnement :
        Dim strCn As String = "Data Source=<server>;" & _
                "Initial Catalog=<database>;Integrated Security=SSPI"
    					
  6. Ajouter le code suivant dans la procédure événementielle Click de Bouton1 et ensuite modifier le chemin d'accès fichier à un fichier d'image exemple disponibles que nécessaire :
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("INSERT INTO BLOBTest (BLOBData) " & _
                "VALUES (@BLOBData)", cn)
            Dim strBLOBFilePath As String = _
                "C:\Documents and Settings\All Users\Documents" & _
                "\My Pictures\Sample Pictures\winter.jpg"
            Dim fsBLOBFile As New FileStream(strBLOBFilePath, _
                FileMode.Open, FileAccess.Read)
            Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte
            fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)
            fsBLOBFile.Close()
            Dim prm As New SqlParameter("@BLOBData", SqlDbType.VarBinary, _
                bytBLOBData.Length, ParameterDirection.Input, False, _
                0, 0, Nothing, DataRowVersion.Current, bytBLOBData)
            cmd.Parameters.Add(prm)
            cn.Open()
            cmd.ExecuteNonQuery()
            cn.Close()
    						
    ce code utilise un objet FileStream pour lire le fichier image à partir du disque dans un tableau d'octets et utilise ensuite un objet Command paramétré pour insérer les données dans la base de données.
  7. Ajoutez le code suivant dans la procédure d'événement Click de Bouton2 :
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("SELECT BLOBID, " & _
                "BLOBData FROM BLOBTest ORDER BY BLOBID", cn)
            Dim da As New SqlDataAdapter(cmd)
            Dim ds As New DataSet()
            da.Fill(ds, "BLOBTest")
            Dim c As Integer = ds.Tables("BLOBTest").Rows.Count
            If c > 0 Then
                Dim bytBLOBData() As Byte = _
                    ds.Tables("BLOBTest").Rows(c - 1)("BLOBData")
                Dim stmBLOBData As New MemoryStream(bytBLOBData)
                picBLOB.Image = Image.FromStream(stmBLOBData)
            End If
    						
    ce code récupère les lignes de la table BLOBTest dans la base de données dans un objet DataSet , copie l'image qui est plus récemment ajouté dans un tableau d'octets , puis dans un objet MemoryStream et charge ensuite le MemoryStream dans la propriété Image du contrôle PictureBox .
  8. Exécutez le projet.
  9. Cliquez sur le fichier à base de données pour charger au moins une image d'exemple dans la base de données.
  10. Cliquez sur base de données pour un contrôle PictureBox pour afficher l'image que vous avez enregistré dans le contrôle PictureBox .
  11. Pour récupérer l'image dans un objet DataReader au lieu d'un objet DataSet , modifiez le code dans la procédure d'événement Click de Bouton2 comme suit :
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("SELECT BLOBID, " & _
                "BLOBData FROM BLOBTest ORDER BY BLOBID", cn)
            Dim dr As SqlDataReader
            cn.Open()
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
            If dr.Read Then
                Dim bytBLOBData(dr.GetBytes(1, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
                dr.GetBytes(1, 0, bytBLOBData, 0, bytBLOBData.Length)
                Dim stmBLOBData As New MemoryStream(bytBLOBData)
                picBLOB.Image = Image.FromStream(stmBLOBData)
            End If
            dr.Close()
    					
  12. Pour insérer l'image à partir du contrôle PictureBox directement dans la base de données, ajoutez un troisième contrôle de bouton ( Bouton3 ) à votre formulaire. Définir la propriété texte de Bouton3 à PictureBox à la base de données et puis ajoutez le code suivant dans la procédure d'événement Click de Bouton3 :
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("INSERT INTO BLOBTest (BLOBData) " & _
                "VALUES (@BLOBData)", cn)
            Dim ms As MemoryStream = New MemoryStream()
            picBLOB.Image.Save(ms, ImageFormat.Jpeg)
            Dim bytBLOBData(ms.Length - 1) As Byte
            ms.Position = 0
            ms.Read(bytBLOBData, 0, ms.Length)
            Dim prm As New SqlParameter("@BLOBData", SqlDbType.VarBinary, _
                bytBLOBData.Length, ParameterDirection.Input, False, _
                0, 0, Nothing, DataRowVersion.Current, bytBLOBData)
            cmd.Parameters.Add(prm)
            cn.Open()
            cmd.ExecuteNonQuery()
            cn.Close()
    						
    ce code extrait les données d'image du contrôle PictureBox dans un objet MemoryStream , copie MemoryStream dans un tableau d'octets , puis utilise ensuite un objet de commande paramétré pour enregistrer le tableau d'octets dans la base de données.
  13. Exécutez le projet. Cliquez sur base de données pour un contrôle PictureBox pour afficher une image que vous avez précédemment enregistré dans le contrôle PictureBox .
  14. Cliquez sur contrôle PictureBox à la base de données pour enregistrer l'image à partir de l' objet PictureBox à la base de données, puis cliquez sur base de données pour un contrôle PictureBox à nouveau pour confirmer que l'image est enregistrée correctement.

Résolution des problèmes

  • Ce test ne fonctionne pas avec la colonne photo dans la table Employés de la base de données les Comptoirs exemple est fourni avec Access et SQL Server. Les images bitmap qui sont stockées dans la colonne photo sont regroupées avec les informations en-tête que crée le contrôle Visual Basic 6.0 OLE Container .
  • Pour utiliser une base de données Access pour tester ce code, vous devez créer la colonne dans la table Access en tant que type objet OLE et ensuite utiliser l'espace de noms System.Data.OLEDB avec le fournisseur Microsoft Jet 4.0 au lieu de l'espace de noms System.Data.SqlClient .
  • Vous consommer beaucoup de surcharge de mémoire si vous récupérez toutes les images à partir d'une table dans le DataSet . Pour consommer moins laisser généraux, les images de votre base de données et extraire les à la fois que vous passez le DataSet . Pour ce faire, exécuter une requête paramétrée pour récupérer l'image voulue dans un objet DataReader et puis introduisez l'image à partir de l' objet DataReader dans le contrôle PictureBox .

Références

Pour plus d'informations sur l'utilisation des données BLOB avec Visual Basic .NET, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
308042 Comment faire pour lire et écrire des données BLOB à l'aide d'ADO.NET avec Visual Basic .NET
316887 Comment faire pour lire et écrire un fichier dans et à partir d'une colonne BLOB à l'aide d'ADO.NET et Visual Basic .NET

Propriétés

Numéro d'article: 321900 - Dernière mise à jour: jeudi 15 juillet 2004 - Version: 2.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Initiation
  • Microsoft Visual Basic .NET 2003 Initiation
Mots-clés : 
kbmt kbhowtomaster kbsqlclient kbsystemdata KB321900 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 321900
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com