Inserer une image dans une base de donnée

kfaycal
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021
- 17 avril 2021 à 12:47
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
- 18 avril 2021 à 14:30
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

Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
17 avril 2021 à 13:38
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
0
kfaycal
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

17 avril 2021 à 14:06
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 ?
0
Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
17 avril 2021 à 14:28
Oui bien sûr
0
kfaycal
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

17 avril 2021 à 15:21
Ce que je veux savoir comment parvenir a insérer le lien de l'image dans la bd?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
17 avril 2021 à 15:54
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
0
kfaycal
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

17 avril 2021 à 16:26
D'accord merci
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
18 avril 2021 à 14:30
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

0