Stocker des images dans sql server

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 736 fois - Téléchargée 31 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
15 novembre 2012

je travail en visual studio 2010 avec le code vb.
Messages postés
2
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
15 novembre 2012

Bonsoir j'ai besoin d'aide à ce nivo.je travail avec une bd mysql dans laquelle je souhaiterai enregistrer une image correspondre à chaque pv.mais quand j'execute ce code ,ça me dit ke pv ne doit pa etre null alors ke je lui ai assigné une valeur.voici le portion de code correpondant:
myCommand = New MySqlCommand("INSERT INTO person(pv,photo)Values(@pv,@image)", oconn)
PictureBox1.Image.Save(ms, Imaging.ImageFormat.Jpeg)
Dim arrpicture() As Byte
arrpicture = ms.GetBuffer()
myCommand.Parameters.Add("@image", MySqlDbType.Blob).Value = arrpicture
myCommand.Parameters.Add("@pv", MySqlDbType.VarChar).Value = t
Try
myCommand.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
ms.Close()
Messages postés
1
Date d'inscription
jeudi 12 mai 2011
Statut
Membre
Dernière intervention
14 mai 2011

salut,je veux inserer des images en sql,et l'afficher dans datagid,puis dans crystal repports,aider moi svp
Messages postés
1
Date d'inscription
vendredi 11 février 2011
Statut
Membre
Dernière intervention
17 février 2011

bonjour,
quel est le controle asp.net qui permet d'afficher : le contenu
[Image].FromStream(ms)
en vb on picture.
merci
Messages postés
2
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
10 février 2011

bonjour
svp j'ai un problém au niveau de cmd.executenonquery
Voila le code


con.Open()

cmd = New SqlCommand("insert into Administrateur values(@code,@nom,@pre,@datenai,@etat,@dateembau,@salaire,@servicepass,@diplome,@nbrenfs,@image)", con)
If Not IsNothing(PictureBox1.Image) Then
Try

PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
Catch
End Try
If ms.Length > MAX_IMAGE_SIZE Then
MsgBox("image trop grosse")
Else
arrPicture = ms.GetBuffer

'arrpicture =table


cmd.Parameters.Add("@code", SqlDbType.Char).Value = txtcode.Text
cmd.Parameters.Add("@nom", SqlDbType.Char).Value = txtnom.Text
cmd.Parameters.Add("@pre", SqlDbType.Char).Value = txtprenom.Text
cmd.Parameters.Add("@datenai", SqlDbType.DateTime).Value = DateTimePicker1.Text
cmd.Parameters.Add("@etat", SqlDbType.Char).Value = txtetat.Text
cmd.Parameters.Add("@dateembau", SqlDbType.DateTime).Value = DateTimePicker2.Text
cmd.Parameters.Add("@salaire", SqlDbType.Money).Value = txtsalaire.Text
cmd.Parameters.Add("@servicepass", SqlDbType.Char).Value = txtservice.Text
cmd.Parameters.Add("@diplome", SqlDbType.Char).Value = richdiplomes.Text
cmd.Parameters.Add("@nbrenfs", SqlDbType.Int).Value = txtnombenfs.Text
cmd.Parameters.Add("@image", SqlDbType.Image).Value = arrPicture
'cmd.Parameters.Add("@image", SqlDbType.Image).Value = DBNull.Value


End If
End If
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
End Try

con.Close()
Merci..
Afficher les 20 commentaires

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.