Beaucoup de gens m'ont posé la question, "mais comment tu enregistres et relis des images dans ta base ?". Bien que cela ne me semblait pas trop compliqué, je vais l'expliquer ici. C'est peut-être pas exactement 'la bonne méthode', mais bon, vous en faites ce que vous voulez.
Pour cet exmple, imaginez une table dans sql server de type :
matable
{
ID (entier)
NOM (chaine)
IMAGE (image)
}
Ainsi qu'un connexion valide et une image nommée picture (comme c'est original).
Source / Exemple :
Public Const MAX_IMAGE_SIZE As Long = 32768 ' 32 Ko
' ----------------------------------------------------------------------------------------
' Ajout d'un enregistrement
' ----------------------------------------------------------------------------------------
Dim myCmd As SqlCommand
Dim ms As New System.IO.MemoryStream
Dim arrPicture() As Byte
myCmd = New SqlCommand("insert into matable values (@id, @nom, @image)", myConnection)
if not isnothnig(picture)
picture.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
If ms.Length > MAX_IMAGE_SIZE Then
' Image trop grosse
end if
arrPicture = ms.GetBuffer()
myCmd.Parameters.Add("@image", SqlDbType.Image).Value = arrPicture
Else
myCmd.Parameters.Add("@image", SqlDbType.Image).Value = DBNull.Value
End If
myCmd.Parameters.Add("@id", SqlDbType.Int).Value = 0
myCmd.Parameters.Add("@nom", SqlDbType.Char).Value = "image1"
myCmd.ExecuteNonQuery()
' ----------------------------------------------------------------------------------------
' Lecture d'un enregistrement
' ----------------------------------------------------------------------------------------
Dim myCmd As SqlCommand
Dim reader As SqlDataReader
Public picture As Image
myCmd = New SqlCommand("select * from matable", myConnection)
reader = myCmd.ExecuteReader()
while reader.read
' Traitement des autres champs ... puis :
If Not reader.IsDBNull(2) Then
Dim arrPicture(MAX_IMAGE_SIZE) As Byte
reader.GetBytes(2, 0, arrPicture, 0, MAX_IMAGE_SIZE)
Dim ms As New System.IO.MemoryStream(arrPicture)
picture = [Image].FromStream(ms)
' Ici on peu appliquer n'importe quel traitement à l'objet picture
' comme par exemple le stocker dans un tableau ou l'afficher
' dans un picturebox etc ...
End If
end while
Conclusion :
Bon, pour bien faire faudrait faire ça dans un try ... catch, mais la c'est du code de démo hein ...
J'ai volontairement autorisé une image 'assez conséquente' - Remplissez un table de cette manière et testez poure vous rendre compte du coût de performance que peut avoir ce genre de manipulations. Voila, esperant que ça suffira à ceux qui cherchaient :).
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.