Bonjour,
Tout d'abord pour expliquer le contexte: je cherche à enregistrer des images (peu importe le format) dans une base SQL Express 2005 et je veux ensuite récupérer l'image pour l'afficher sur ma Form. J'ai donc déclaré un champ de type "VarBinary(MAX)" dans ma table pour contenir l'image (Le champ de type "Image" est obsolète et va disparaitre dans SQL 2008, j'ai donc péféré prendre les devant).
Dans mon code voici les fonctions que j'ai créé:
Je convertis l'image en tableau de byte pour l'enregistrement en base:
Ensuite je formate ma chaine SQL pour l'enregistrement en base:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Public Shared Function ConvertImageToByteArray(ByVal imageToConvert As Image, ByVal formatOfImage As Imaging.ImageFormat) As Byte() Try Dim ms As New MemoryStream imageToConvert.Save(ms, formatOfImage) Return (ms.ToArray) Catch ex As Exception Return Nothing End Try End Function
L'enregistrement dans la table SQL semble se passer correctement, j'ai bien des données dans mon champ après la création de l'enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Public Shared Function FormatModify(ByVal champ As Byte()) As String Dim ret As String If champ Is Nothing Then ret = "NULL" Else ret = String.Concat("CONVERT(varbinary(max),'", BitConverter.ToString(champ), "',1)") End If Return ret End Function
C'est la manipulation inverse qui pose problème.
Je convertis la valeur de mon champ en tableau de Byte (C'est ici qu'il semble qu'il y ai un problème):
Je convertis le tableau de Byte récupéré en Image à l'aide d'un stream:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Public Shared Sub GetValue(ByVal field As Object, ByRef dbData As Byte()) Dim conversion As Encoding = Encoding.Unicode If field.Equals(DBNull.Value) Then dbData = Nothing Else dbData = conversion.GetBytes(BitConverter.ToString(CType(field, Byte()))) 'dbData = CType(field, Byte()) End If End Sub
Et cette dernière fonction plante sur le "ms.Write" avec le message d'erreur: "Paramètre non valide".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Public Shared Function ConvertByteArrayToImage(ByVal tableau As Byte()) As Image Try Dim newImage As Image Dim ms As New MemoryStream(tableau) ms.Write(tableau, 0, tableau.Length) newImage = Image.FromStream(ms) Return newImage Catch ex As Exception Return Nothing End Try End Function
Est-ce que quelqu'un aurait une idée ou une autre méthode à ma poposer?
Merci d'avance.
Partager