Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

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

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
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 .

back to the top

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
back to the top

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.DataImports System.Data.SqlClientImports System.IOImports 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.
back to the top

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 .
back to the top
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
back to the top

Avertissement : cet article a été traduit automatiquement

Propriétés

ID d'article : 321900 - Dernière mise à jour : 07/15/2004 16:24:22 - Révision : 2.2

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

  • kbmt kbhowtomaster kbsqlclient kbsystemdata KB321900 KbMtfr
Commentaires
TagName("head")[0].appendChild(m);