begin process at 2012 02 12 00:00:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > STOCKER DES IMAGES DANS SQL SERVER

STOCKER DES IMAGES DANS SQL SERVER


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de Donnees Source .NET ( DotNet ) Niveau :Débutant Date de création :02/04/2004 Date de mise à jour :28/05/2004 09:21:05 Vu :18 283

Auteur : Lumpy__

Ecrire un message privé
Site perso
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

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

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


 Sources de la même categorie

Source avec Zip Source avec une capture BIEN ADMINISTRER LES ETUDIANTS ET LEURS CÔTES par okosa
Source avec Zip VBA EXEL GESTION DE PERSONEL NOUVEAU CONTRAT DE TRAVAI par oudlarbi
Source avec Zip Source avec une capture CREATION D'UN OBJET D'ACCÈS AUX DONNÉES par okosa
Source avec Zip Source .NET (Dotnet) MISAHORAIRE par MdelM
Source avec Zip Source avec une capture BASEDEDONNEES,GESTIONDEMALADES,DATABASSE par shadkitenge

Commentaires et avis

Commentaire de DocteurVB le 02/04/2004 12:48:12

est ce que c'est possible de faire la même chose avec MySql ???

Commentaire de Lumpy__ le 02/04/2004 13:50:27

En théorie ça devrait pas poser de problème. En fait, il suffit de remplacer le type de champs image par un blob en mysql et d'utiliser la librairie .net pour mysql (je n'ai qu'une version beta mais ça a l'air de fonctionner).

Commentaire de Didchr81 le 03/04/2004 08:39:31

Salut!

J'utilise moi même la fonction Blob sur SQL depuis un ans maintenant sur une table qui contient 12000 enregistrements à ce jour. l'Appli tourne notamment en environnement TSE, avec un code plus pointu, car je dois enregistré l'image mais aussi la restaurer pour une visualisation. Cette appli est trop grosse pour la mettre sur ce site, mais si quelqu'un est intéressé par le module Image, je peux lui donné.

Salutations !  

Commentaire de bouv le 05/04/2004 14:53:16

Salut Didchr81,

Tom module image m'interresse. Je suis en train de faire un petit logiciel de facturation et j'aimerai pouvoir insérer des images pour les articles en vente.

Peut tu m'envoyer ton module.

decf20012003@free.fr

Merci par avance et bonne progz

Bien Cordialement

Commentaire de lulu1708 le 09/11/2004 18:49:56

salut  Lumpy,

j'ai une erreur qui est générée :
Paramètre non valide utilisé.
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.ArgumentException: Paramètre non valide utilisé.

Trace de la pile:


[ArgumentException: Paramètre non valide utilisé.]
   System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement) +309
   System.Drawing.Image.FromStream(Stream stream) +7
   WebApplication1.test.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebApplication1\test.aspx.vb:44
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +35
   System.Web.UI.Page.ProcessRequestMain() +731


Et je n'arrive pas à résoudre ce Problème.
Pourrait-tu m'aider ??

Merci

lulu

Commentaire de Lumpy__ le 10/11/2004 10:16:02

envoie moi le bout de code source qui déraille à : ps1k0@msn.com

Je vais voir ce que je peux faire.

a++

lUMPY

Commentaire de ekluska le 16/11/2005 12:14:51

bonjour,
j'ai le meme probleme avec ce fameux message "parametre non valide utilisée"
Est ce que quelqu'un a trouvé la solution

merci pour toute l'aide apportée

a++

Commentaire de solochiz1 le 28/03/2006 00:08:08

lorsque j'execute voila l'erreur du NonQuery :
Operand type clash: image is incompatible with bit
j'ai pas compris ou est l'imcompatibilité
je travaille avec studio 2005

Commentaire de babchrist le 27/02/2007 17:23:12

Lumpy__

Bonjour moi c'est Babchrist. J'ai vu ton code il bien mais je voudrais un peu la même chose en VB6. En fait je cherche un petit code qui va permettre d'enregistrer une image dans une base sql server et si possible qui va encore me permettre de reconstituer cette image enregistrée dans la base, en fichier BMP ou JPG. Merci de m'aider.

Babchrist.


Commentaire de PhilippebedinCS le 04/04/2007 01:04:15

Bonjour, j'ai testé ton code car j'avais trouvé un jour le m^me genre de truc mais avec ACCESS; le problème ici c'est que tout semble fonctionner avec ton code (que j'ai légèrement adapté à une table sql perso) sauf que ça n'enregistre rien dans ma table... voici mon code :

Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
    Public Const MAX_IMAGE_SIZE As Long = 32768
    Public picture As Image = My.Resources.Resource1.chevaux1
    Public myconnexion As New SqlConnection
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO : cette ligne de code charge les données dans la table 'Database1DataSet.JockeysPlat'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
        Me.JockeysPlatTableAdapter.Fill(Me.Database1DataSet.JockeysPlat)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' 32 Ko

        ' ----------------------------------------------------------------------------------------
        ' Ajout d'un enregistrement
        ' ----------------------------------------------------------------------------------------

        Dim myCmd As SqlClient.SqlCommand
        Dim ms As New System.IO.MemoryStream
        Dim arrPicture() As Byte

        myconnexion.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"

        myconnexion.Open()
        myCmd = New SqlClient.SqlCommand("insert into JockeysPlat values (@nom,@Idimg,@Portrait)", myconnexion)
        If Not picture.Equals(Nothing) Then
            picture.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
            If ms.Length > MAX_IMAGE_SIZE Then
                MsgBox("TROP GRANDE")
            End If
            arrPicture = ms.GetBuffer()
            myCmd.Parameters.Add("@Portrait", SqlDbType.Image).Value = arrPicture
        Else
            myCmd.Parameters.Add("@Portrait", SqlDbType.Image).Value = DBNull.Value
        End If
        myCmd.Parameters.Add("@nom", SqlDbType.Char).Value = "image1"
        myCmd.Parameters.Add("@Idimg", SqlDbType.Int).Value = 0
        MsgBox(myCmd.ExecuteNonQuery())
        Stop
        myconnexion.Close()
    End Sub
        '        
End Class

Ma table reste imperturbale...
Il est vrai que je débute en SQL et que ces histoires de variables paramétrées...
As-tu une explication . Merci.

Commentaire de garnier54 le 30/11/2007 11:04:02

bonjour

merci tout d'abord pour ton code j'ai essayer de le tester suis en vs2005 web express et je rencontre qq problemes

sur picture.save il ne sort une erreur
save is not a menber of system.web.ui.webcontrols.image
meme probleme pour image.FromStream

merci de votre aide

Commentaire de aitoz le 02/10/2008 15:20:35

Bonjour,

J'ai la même erreur qui est générée : Paramètre non valide utilisé.
Cela doit venir de la taille du buffer. l'image ne fait pas tjs le même poids (Ko) et peut-être que ca vient de ça ?!

Est-ce que vous pouvez m'aider ?

Merci A+

Commentaire de mohamedt21 le 19/03/2009 17:11:36

svp j'ai besoin d'un code qui permet l'ajout vers une base sql server et le téléchargement d'un fichier pdf  merci d'avance

Commentaire de rmouads le 10/07/2009 19:16:25

Merçi pour le code aprés le test je vais dir merçi une autre fois

Commentaire de arapahoo le 18/11/2009 14:01:34

Bonjour,
Merci pour ce bout de code, ça me conviendrais tout à fait
mais je tourne en rond sur la même erreur "le Paramètre n'est pas valide"
en passant sur Picture = [Image].FormStream(ms)
si quelqu'un à trouvé la solution à ce problème je serait heureux d'apprendre
comment la mettre en place.  Merci

Commentaire de meryemado le 09/02/2011 09:37:35

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

Commentaire de winxp2009 le 17/02/2011 11:43:24

bonjour,
quel est le controle asp.net qui permet d'afficher : le contenu
[Image].FromStream(ms)
en vb on picture.
merci

Commentaire de ninasim le 14/05/2011 04:19:57

salut,je veux inserer  des images en sql,et l'afficher dans datagid,puis dans crystal repports,aider moi svp

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales