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:

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

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):

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
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
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
Et cette dernière fonction plante sur le "ms.Write" avec le message d'erreur: "Paramètre non valide".

Est-ce que quelqu'un aurait une idée ou une autre méthode à ma poposer?

Merci d'avance.