Meilleur auteur de réponses
Charger données BLOB dans une PictureBox

Question
-
Bonjour,
comme indiqué dans la question j'aimerais charger des données Blob d'une base SQL Server dans un PictureBox ; je suis tombé sur ce lien : https://support.microsoft.com/fr-fr/help/321900/how-to-display-an-image-from-a-database-in-a-windows-forms-picturebox
J'ai testé la solution avec ce code :
document = New System.Data.SqlClient.SqlCommand("SELECT INFODOC FROM IMAGE WHERE IUDOC = '0000123008'", ConnexionSQL) Dim dr As SqlDataReader dr = document.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) PictureBox1.Image = Image.FromStream(stmBLOBData) End If dr.Close()
Mais j'obtiens "L'index se trouve en dehors des limites du tableau."
Il s'agit d'une partie que je maitrise peu, je ne vois pas comment résoudre cette erreur, ma donnée BLOB est trop volumineuse peut-être ? comment le vérifier ?
Merci d'avance de votre aide
Réponses
-
Pour ceux qui pourraient rencontrer le même souci que moi, j'ai réussi à m'en sortir ainsi :
J'ai viré le DataReader et remplacé ça :
Dim bytBLOBData(dr.GetBytes(0, 0, Nothing, 0, Integer.MaxValue) - 1)AsByte dr.GetBytes(0, 0, bytBLOBData, 0, bytBLOBData.Length)
par :
Dim bytBLOBData()AsByte = DirectCast(document.ExecuteScalar(), Byte())
et c'est ok.
- Marqué comme réponse Teodora SharkovaModerator jeudi 21 septembre 2017 08:34
Toutes les réponses
-
Bonjour rocketter,
Comment avez-vous défini SqlCommand ?
Je vous invite à consulter le thread suivant :
Index was outside the bounds of the Array. (Microsoft.SqlServer.smo)
Cordialement,
TeodoraVotez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.
-
Bonjour,
merci de votre réponse.
Je ne suis pas sur de comprendre votre question sinon, le SqlCommand, je l'ai défini ainsi :
Dim document As System.Data.SqlClient.SqlCommand
Quant au lien proposé, la situation que décrit la personne ne s'applique pas à mon cas. Elle semble se connecter à son serveur SQL 2012 via une install locale de Management Studio en 2008.
Dans mon code je ne me sers pas de Management Studio, j'accède directement au serveur via ado.net et la chaine de connexion qui va bien.
-
J'ai réussi à aller plus loin en remplaçant cette ligne :
Dim bytBLOBData(dr.GetBytes(1, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
par celle-ci:
Dim bytBLOBData(dr.GetBytes(0, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
maintenant par contre le programme m'indique ceci : Le paramètre n'est pas valide en arrivant sur cette ligne :
PictureBox1.Image = Image.FromStream(stmBLOBData)
-
Après quelques recherches, je vois que cela pourrait venir du datatype de ma colonne qui est au format image, alors qu'à priori, il vaudrait mieux qu'elle soit au format varbinary ; à cause de ça ma picturebox considère mon image comme non valide, qu'en pensez-vous ? et comment contourner ce pb finalement ? car évidemment je ne peux changer le type de ma colonne
-
Pour ceux qui pourraient rencontrer le même souci que moi, j'ai réussi à m'en sortir ainsi :
J'ai viré le DataReader et remplacé ça :
Dim bytBLOBData(dr.GetBytes(0, 0, Nothing, 0, Integer.MaxValue) - 1)AsByte dr.GetBytes(0, 0, bytBLOBData, 0, bytBLOBData.Length)
par :
Dim bytBLOBData()AsByte = DirectCast(document.ExecuteScalar(), Byte())
et c'est ok.
- Marqué comme réponse Teodora SharkovaModerator jeudi 21 septembre 2017 08:34
-
Bonjour rocketter,
Je vous remercie d'avoir partagé cette solution avec la communauté du forum.
Bonne journée.Cordialement,
TeodoraVotez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.