Inserer une image dans une base de donnée

Signaler
Messages postés
16
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
1 mai 2021
-
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
3 mai 2021
-
Bonjour, comment vous allez?
j'aimerais savoir comment Insérer une image dans la base de donnée a partir du formulaire C#.
Et aussi quel doit être "image" le type de champs dans la table user?
voici ce que moi j'ai mi:


voici d'abord le formulaire ajout user :


voici mon code source:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using System.Windows.Forms;
using WindowsFormsApp1.BLL;
using WindowsFormsApp1.DAL;
using WindowsFormsApp1.TOOL;
using MySql.Data.MySqlClient;

namespace WindowsFormsApp1.Windows_Form.utilisateur
{
    public partial class ajoututilisateur : Form
    {
        databasehelper dh = new databasehelper();
        MySqlDataReader dr;
        operateurcontroleur opc = new operateurcontroleur();
        operateurinfo opi = new operateurinfo();
        FormCollection listform;
        DataSet ds1, ds2, ds3;
        
        //variable
        bool result;

        private UserControl userajout;
        public ajoututilisateur(UserControl usera)
        {
            InitializeComponent();
            this.userajout = usera;
        }
        //public MySqlConnection maConnection;
        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                if (pictureprofil.Image == null)
                {
                    if (txtprofil.Text == "Etudiant" || txtprofil.Text == "Etudiant Chef")
                    {
                        if (txtnomprenom.Text == "" || txtlogin.Text == "" || txtmotdepasse.Text == "" || txtprofil.Text == "" || txtstatut.Text == "" || txtfiliere.Text == "" || txtniveau.Text == "")
                        {
                            MessageBox.Show("Désolé tous les champs doivent être renseignés");
                        }
                        else
                        {
                            dh.ExecuteNonQuery(" insert into utilisateur(nomprenom,login,motpasse,profil,statut,nom_filiere,nom_niveau) values ('" + txtnomprenom.Text.Replace("'", "''") + "','" + txtlogin.Text.Replace("'", "''") + "',password('" + txtmotdepasse.Text.Replace("'", "''") + "'),'" + txtprofil.Text.Replace("'", "''") + "','" + txtstatut.Text.Replace("'", "''") + "', '" + txtfiliere.Text.Replace("'", "''") + "','" + txtniveau.Text.Replace("'", "''") + "')");
                            MessageBox.Show("Utilisateur enregistré avec succès");
                            (userajout as UCutilisateur).affiu();


                        }
                    }
                    else
                    {
                        if (txtnomprenom.Text == "" || txtlogin.Text == "" || txtmotdepasse.Text == "" || txtprofil.Text == "" || txtstatut.Text == "")
                        {
                            MessageBox.Show("Désolé tous les champs doivent être renseignés");
                        }
                        else
                        {
                            dh.ExecuteNonQuery(" insert into utilisateur(nomprenom,login,motpasse,profil,statut) values ('" + txtnomprenom.Text.Replace("'", "''") + "','" + txtlogin.Text.Replace("'", "''") + "',password('" + txtmotdepasse.Text.Replace("'", "''") + "'),'" + txtprofil.Text.Replace("'", "''") + "','" + txtstatut.Text.Replace("'", "''") + "')");
                            MessageBox.Show("Utilisateur enregistré avec succès");
                            (userajout as UCutilisateur).affiu();


                        }
                    }
                }

                else
                {
                    if (txtprofil.Text == "Etudiant" || txtprofil.Text == "Etudiant Chef")
                    {
                        if (txtnomprenom.Text == "" || txtlogin.Text == "" || txtmotdepasse.Text == "" || txtprofil.Text == "" || txtstatut.Text == "" || txtfiliere.Text == "" || txtniveau.Text == "")
                        {
                            MessageBox.Show("Désolé tous les champs doivent être renseignés");
                        }
                        else
                        {
                            MemoryStream ms = new MemoryStream();
                            pictureprofil.Image.Save(ms, pictureprofil.Image.RawFormat);

                            byte[] img = ms.ToArray();
                            dh.ExecuteNonQuery(" insert into utilisateur(nomprenom,login,motpasse,profil,statut,nom_filiere,nom_niveau,photo) values ('" + txtnomprenom.Text.Replace("'", "''") + "','" + txtlogin.Text.Replace("'", "''") + "',password('" + txtmotdepasse.Text.Replace("'", "''") + "'),'" + txtprofil.Text.Replace("'", "''") + "','" + txtstatut.Text.Replace("'", "''") + "','"+txtfiliere.Text.Replace("'","''")+"','"+txtniveau.Text.Replace("'","''")+"','" + img + "'"); ;
                            MessageBox.Show("Utilisateur enregistré avec succès");
                            (userajout as UCutilisateur).affiu();


                        }
                    }
                    else
                    {
                        if (txtnomprenom.Text == "" || txtlogin.Text == "" || txtmotdepasse.Text == "" || txtprofil.Text == "" || txtstatut.Text == "")
                        {
                            MessageBox.Show("Désolé tous les champs doivent être renseignés");
                        }
                        else
                        {
                            MemoryStream ms = new MemoryStream();
                            pictureprofil.Image.Save(ms,pictureprofil.Image.RawFormat) ;
                            
                            byte[] img = ms.ToArray();
                            dh.ExecuteNonQuery(" insert into utilisateur(nomprenom,login,motpasse,profil,statut,photo) values ('" + txtnomprenom.Text.Replace("'", "''") + "','" + txtlogin.Text.Replace("'", "''") + "',password('" + txtmotdepasse.Text.Replace("'", "''") + "'),'" + txtprofil.Text.Replace("'", "''") + "','" + txtstatut.Text.Replace("'", "''") + "','" + img + "', "); ;
                           
                            MessageBox.Show("Utilisateur enregistré avec succès");
                            (userajout as UCutilisateur).affiu();


                        }
                    }
                }



            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
       
        private void btnphoto_Click(object sender, EventArgs e)
        {
            try
            {

                
                OpenFileDialog op = new OpenFileDialog();
                op.Title = "Insérer la photo d'un Utilisateur";
                op.Filter = "Images JPEG|*.jpg|Images GIF|*.gif|Images PNG|*.png|Images BMP|*.bmp|Tous les fichiers |*.*"; //pour afficher seulement les images "|*.JPG;*.PNG;*.GIF;*.BMP";
                DialogResult dr = op.ShowDialog();
                pictureprofil.Image = Image.FromFile(op.FileName);
                string chemin = op.FileName;



            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void label9_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            txtnomprenom.Text = "";
            txtlogin.Text = "";
            txtmotdepasse.Text = "";
            txtprofil.Text = "";
            txtstatut.Text = "";
            txtfiliere.Text = "";
            txtniveau.Text = "";
            pictureprofil.Image = null;
        }

        private void retourprofil_Paint(object sender, PaintEventArgs e)
        {
           
        }

        private void retourfiliere_Click(object sender, EventArgs e)
        {
            txtfiliere.Text = "";
        }

        private void retourniveau_Click(object sender, EventArgs e)
        {
            txtniveau.Text = "";
        }

        private void pictureprofil_Click(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ajoututilisateur_Load(object sender, EventArgs e)
        {
            try
            {
                //charger les noms des profils
                ds1 = dh.ExecuteDataSet("select distinct nom_profil from profil order by nom_profil asc");
                txtprofil.DataSource = ds1.Tables[0];
                txtprofil.DisplayMember = "nom_profil";
                txtprofil.Text = "";

                //charger les noms des filieres 
                ds2 = dh.ExecuteDataSet("select distinct abrege from filiere order by abrege asc");
                txtfiliere.DataSource = ds2.Tables[0];
                txtfiliere.DisplayMember = "abrege";
                txtfiliere.Text = "";

                //charger les noms des niveaux
                ds3 = dh.ExecuteDataSet("select distinct abrege from niveau order by abrege asc");
                txtniveau.DataSource = ds3.Tables[0];
                txtniveau.DisplayMember = "abrege";
                txtniveau.Text = "";

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

7 réponses

Messages postés
15900
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 mai 2021
540
Bonjour

de façon générale, c'est déconseillé.
Ca fait augmenter la taille des bases de données de façons exponentielles, ce qui a pour effet lenteur, plantage, saturation etc...
La pratique conseillée est de stocker les images dans un répertoire dédié, avec un nom unique est d'enregistrer le nom du fichier dans la base de données.

Il y a d'ailleurs des bases de données pour lesquelles c'est tout simplement impossible.
Il faut donc commencer par regarder la documentation de ta bdd.

Certaines base permettent de stoker des binaires de grandes tailles sans savoir si c'est une image, un son ou tout autre chose, à toi de faire la "transformation" souvent on parle de champ BLOB https://docs.microsoft.com/fr-fr/sql/relational-databases/blob/binary-large-object-blob-data-sql-server?view=sql-server-ver15
Messages postés
16
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
1 mai 2021

D'accord je vois ce que vous disiez. Mais est-ce possible d'insérer le lien d'une image dans la bd et lorsqu'une personne se connecte a l'application l'image de la personne s'affiche ?
Messages postés
15900
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 mai 2021
540
Oui bien sûr
Messages postés
16
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
1 mai 2021

Ce que je veux savoir comment parvenir a insérer le lien de l'image dans la bd?
Messages postés
15900
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 mai 2021
540
Et bien à partir de ta PictureBox tu l’enregistres quelque part (par exemple dans c:\BDD\Images) avec un nom unique et fortement lié à l’enregistrement (par exemple en utilisant la clé unique si tu en as une) et tu stokes le nom ou le chemin complet dans la BDD sous forme de string
Messages postés
16
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
1 mai 2021

D'accord merci
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
3 mai 2021
137
Bonjour
Si votre problème est solutionné veuillez le marquer comme "résolu" .
ainsi que cette discussion : https://codes-sources.commentcamarche.net/forum/affich-10105172-inserer-une-matiere-dans-datagridview-en-c#p10105188
Merci