IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Impossible d'écrire dans ma DB


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 41
    Par défaut Impossible d'écrire dans ma DB
    Bonjour à tous !

    J'ai donc un petit programme qui me permet de générer des devis sous excel..
    J'ai une partie où les données du client doivent être entrées, j'arrive bien à récupéré les données pour écrire sur mon fichier excel mais pas dans ma base de données..

    Mon code poru initialiser la connection et écrire dans la DB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using MySql.Data.MySqlClient;
     
    namespace GestionDevis
    {
        class SqlConnection
        {
            private MySqlConnection connection;
     
            // Constructeur
            public SqlConnection()
            {
                this.InitConnexion();
            }
     
            // Méthode pour initialiser la connexion
            private void InitConnexion()
            {
                // Création de la chaîne de connexion
                string connectionString = "SERVER=127.0.0.1:3306; DATABASE=GestionDevis; UID=root; PASSWORD=";
                this.connection = new MySqlConnection(connectionString);
            }
     
            // Méthode pour ajouter un contact
            public void AddClient()
            {
                try
                {
                    // Ouverture de la connexion SQL
                    this.connection.Open();
     
                    // Création d'une commande SQL en fonction de l'objet connection
                    MySqlCommand cmd = this.connection.CreateCommand();
     
                    // Requête SQL
                    cmd.CommandText = "INSERT INTO client(IdCli, RSCli, RueCli, VilleCli, CPCli, NumTelCli, MailCli)VALUES(@IdCli, @RSCli, @RueCli, @VilleCli, @CPCLi, @NumTelCli, @MailCli)";
     
                    // utilisation de l'objet contact passé en paramètre
                    cmd.Parameters.AddWithValue("@IdCli", Client.c.Id1);
                    cmd.Parameters.AddWithValue("@RSCli", Client.c.RS1);
                    cmd.Parameters.AddWithValue("@RueCli", Client.c.Adresse1);
                    cmd.Parameters.AddWithValue("@VilleCli", Client.c.Ville1);
                    cmd.Parameters.AddWithValue("@RueCli", Client.c.Adresse1);
                    cmd.Parameters.AddWithValue("@CPCli", Client.c.CP1);
                    cmd.Parameters.AddWithValue("@NumTelCli", Client.c.NumTel1);
                    cmd.Parameters.AddWithValue("@MailCli", Client.c.AdresseMail1);
     
                    // Exécution de la commande SQL
                    cmd.ExecuteNonQuery();
     
                    // Fermeture de la connexion
                    this.connection.Close();
                }
                catch
                {
     
                }
            }
        }
    }
    L'évenement sur lequel j'appel la méthode pour insérer les données dans la DB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    private void bt_valider_Click(object sender, EventArgs e)
            {
                Fm_Devis f = new Fm_Devis();
                f.Show();
                this.Hide();
     
                //On récupére les données des textbox
                Client.c.RS1 = tb_RS.Text;
                Client.c.Adresse1 = tb_rue.Text;
                Client.c.Ville1 = tb_ville.Text;
                Client.c.CP1 = tb_CP.Text;
                Client.c.NumTel1 = tb_numTel.Text;
                Client.c.AdresseMail1 = tb_mail.Text;
                SqlConnection sc = new SqlConnection();
                sc.AddClient();
                MessageBox.Show("Données client enregistrées !");
            }
    Le script de ma DB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    CREATE DATABASE IF NOT EXISTS `GestionDevis` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    USE `GestionDevis`;
    DROP TABLE IF EXISTS `CLIENT`;
    CREATE TABLE IF NOT EXISTS `CLIENT` (
      `IdCli` int(10),
      `RSCli` varchar(100),
      `RueCli` varchar(40) ,
      `VilleCli` varchar(20),
      `CPCli`INT(10),
      `NumTelCli`INT(10),
      `MailCli`varchar(50),
      PRIMARY KEY (`IdCli`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    DROP TABLE IF EXISTS `CA`;
    CREATE TABLE IF NOT EXISTS `CA` (
      `IdCA` varchar(3),
      `NomCA` varchar(20),
      `PnomCA` varchar(40),
      `NbDevisCA`INT(10),
      `ChiffreCA`INT(100),
      PRIMARY KEY (`IdCA`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    DROP TABLE IF EXISTS `DEVIS`;
    CREATE TABLE IF NOT EXISTS `DEVIS` (
      `NumDev` int(7) NOT NULL,
      `IdCli` int(10),
      `IdCA` varchar(3),
      PRIMARY KEY (`NumDev`),
      FOREIGN KEY (`IdCli`) REFERENCES `CLIENT` (`IdCli`),
      FOREIGN KEY (`IdCA`) REFERENCES `CA` (`IdCA`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Merci d'avance pour les réponses que vous allez m'apporter,
    RythmBreaker

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Dans ton code, je vois une variable Client utilisée un peu partout. Elle est définie à quel niveau ? Car dans la classe SqlConnection, je ne vois aucune définition de Client ni même un client passé en paramètre ?? Variable globale ?
    De plus, dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Fm_Devis f = new Fm_Devis();
    f.Show();
    this.Hide();
    ...
    Si Fm_Devis contient les informations à saisir pour Client, c'est normal. La méthode Show() n'est pas bloquante. Cela signifie que le code qui suit sera immédiatement exécuté...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 41
    Par défaut
    Pour la variable c, oui c'est un objet global défini dans ma classe client.
    Immédiatement executé ? C'est à dire ?

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Comme je l'ai écrit, Show() n'est pas bloquant. Cela signifie que la fenêtre sera affichée mais le code suivant le show() sera exécuter non pas à la fermeture de la fenêtre mais immédiatement après l'affichage. Pour exécuter le code seulement après fermeture de ta fenêtre Devis, utiliser ShowDialog()

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 41
    Par défaut
    Même avec ShowDialog, ça ne fonctionne pas..
    Ou alors je l'ai mal utilisé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     private void bt_valider_Click(object sender, EventArgs e)
            {
                //On récupére les données des textbox
                Client.c.RS1 = tb_RS.Text;
                Client.c.Adresse1 = tb_rue.Text;
                Client.c.Ville1 = tb_ville.Text;
                Client.c.CP1 = tb_CP.Text;
                Client.c.NumTel1 = tb_numTel.Text;
                Client.c.AdresseMail1 = tb_mail.Text;
                SqlConnection sc = new SqlConnection();
                sc.AddClient();
                MessageBox.Show("Données client enregistrées !");
                Fm_Devis f = new Fm_Devis();
                this.Hide();
                f.ShowDialog();
            }

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Salut

    est-ce que tu arrives à lire dans ta base de données ?

    J'ai l'impression que ta chaine de connexion n'a pas la bonne tête...

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 41
    Par défaut
    Salut !

    J'aurais peut-être dû mettre le tag débutant.. Je débute dans la liaison de base de données à un programme !
    Comment pourrais-je faire pour vérifier que ma base de donnée est bien lisible ?

    Merci d'avance !

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bonjour

    1ere option : Utiliser SQL Studio Management pour te connecter à ta base et voir si tout fonctionne bien (si il s'agit d'une BD SQL Server (express ou pas d'ailleurs).

    ET sinon, essayer de faire une lecture d'une table (en faisant un bête "sql * from le nom d'une table de ta base")

  9. #9
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Moui mais déjà on va pas ajouter un client comme ceci. C'est complètement tordu de passer par une membre statique. Enfin je sais même pas trop comment tu t'y prends !
    Et puis il n'y a aucun test ou retour. On ne sais même pas si tu es connecté...

    Du coup j'ai repris un peu tes classes BDD / Client / petit exemple dans un main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    class SqlConnection : IDisposable
        {
            private MySqlConnection m_Connexion;
            public string m_DerniereErreur { get; private set; }
     
            // Constructeur
            public SqlConnection()
            {
                this.InitConnexion();
            }
     
            // Méthode pour initialiser la connexion
            private void InitConnexion()
            {
                // Création de la chaîne de connexion
                string connectionString = "SERVER=127.0.0.1:3306; DATABASE=GestionDevis; UID=root; PASSWORD=";
                this.m_Connexion = new MySqlConnection(connectionString);
            }
     
            public bool Open()
            {
                try
                {
                    this.m_Connexion.Open();
                    return true;
                }
                catch (Exception ex)
                {
                    this.m_DerniereErreur = ex.Message;
                    Console.WriteLine(ex.Message);
                    return false;
                }
            }
     
            public void Close()
            {
                this.m_Connexion.Close();
            }
     
            public void Dispose()
            {
                if (this.m_Connexion != null)
                {
                    this.Close();
                    this.m_Connexion.Dispose();
                    this.m_Connexion = null;
                }
            }
     
            public void RAZDerniereErreur()
            {
                this.m_DerniereErreur = string.Empty;        
            }
     
            /// <summary>
            /// Ajout d'un client dans la base
            /// </summary>
            /// <param name="pClient">Client à ajouter</param>*
            /// <returns> vrai si client ajouté faux si erreur</returns>
            public bool AddClient(Client pClient)
            {
                try
                {
                    // Création d'une commande SQL en fonction de l'objet connection
                    using (MySqlCommand cmd = this.m_Connexion.CreateCommand())
                    {
                        // Requête SQL
                        cmd.CommandText = "INSERT INTO client(IdCli, RSCli, RueCli, VilleCli, CPCli, NumTelCli, MailCli)VALUES(@IdCli, @RSCli, @RueCli, @VilleCli, @CPCLi, @NumTelCli, @MailCli)";
     
                        // utilisation de l'objet contact passé en paramètre
                        cmd.Parameters.AddWithValue("@IdCli", pClient.Id1);
                        cmd.Parameters.AddWithValue("@RSCli", pClient.RS1);
                        cmd.Parameters.AddWithValue("@RueCli", pClient.Adresse1);
                        cmd.Parameters.AddWithValue("@VilleCli", pClient.Ville1);
                        cmd.Parameters.AddWithValue("@RueCli", pClient.Adresse1);
                        cmd.Parameters.AddWithValue("@CPCli", pClient.CP1);
                        cmd.Parameters.AddWithValue("@NumTelCli", pClient.NumTel1);
                        cmd.Parameters.AddWithValue("@MailCli", pClient.AdresseMail1);
     
                        // Exécution de la commande SQL
                        cmd.ExecuteNonQuery();
     
                        return true;
                    }
                }
                catch(Exception ex)
                {
                    this.m_DerniereErreur = ex.Message;
                    Console.WriteLine(ex.Message);
                    return false;
                }
            }
        }
     
        public class Client
        {
            public long Id1 { get; set; }
            public string RS1 { get; set; }
            public string Adresse1 { get; set; }
            public string Ville1 { get; set; }
            public string Rue1 { get; set; }
            public int CP1 { get; set; }
            public string NumTel1 { get; set; }
            public string AdresseMail1 { get; set; }
        }
     
        public static class Program
        {
            public static void Main(string[] args)
            {
                using (SqlConnection co = new SqlConnection())
                {
                    if (!co.Open())
                    {
                        Console.WriteLine("Echec d'ouverture de la connexion : {0}", co.m_DerniereErreur);
                        return;
                    }
     
                    var client = new Client() { Id1 = 1, Adresse1 = "55", Rue1 = "rue du soleil", Ville1 = "Toulouse", CP1 = 31000, AdresseMail1 = "xx@xx.fr", NumTel1 = "00.00.00.00.00", RS1 = "fezs" };
                    co.AddClient(client);
                }
            }
        }
    Sachant que personnellement je ne mettrait pas mon client directement dans ma table de dialogue avec la BDD.
    Tu devrais plutôt faire une table "Donnees" ou quelque chose comme ça qui dispose d'une "SqlConnection" et qui peut ajouter ou recherche un client.

    Petit plus tu regarderas les transactions quand tout fonctionnera c’est important de connaitre la notion en base de données.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 41
    Par défaut
    Je passe par un objet statique car je dois réutiliser les données du même objet dans un autre form, et je vois pas vraiment comment faire autrement que comme ça.. Sinon mon programme sert à rien, fin je peux pas reporter les données du client saisies dans mon fichier excel ._.
    Sinon j'ai réussi à écrire dans ma DB, mais maintenant plus moyen, et je n'arrive pas à trouver ce qui fait que ça a fonctionné à un moment.. #Fatigué :')

  11. #11
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Pas besoin d'avoir un objet statique pour faire ça. Tu passes la référence de ton client dans le constructeur de ta deuxième form ça sera plus propre. Au pire tu va le chercher une deuxième fois dans la BDD.
    Halte aux variables globales à tout va. C’est pas maintenable.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 41
    Par défaut
    Bon bah merci pour vos conseils, ça fonctionne ! En fin de compte il fallait définir le port avec "PORT=3306" au lieu de le mettre directement après l'adresse du serveur.. ._.
    Et lead ne t'en fais pas j'ai tout modifié pour mon objet client, il n'est plus en static :p

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible d'écrire dans un formulaire ou requete
    Par julie75 dans le forum Access
    Réponses: 12
    Dernier message: 28/03/2013, 16h56
  2. Impossible d'écrire dans un fichier
    Par laurentUTC dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/04/2007, 13h18
  3. Impossible d'écrire dans lib
    Par manson888 dans le forum Mandriva / Mageia
    Réponses: 32
    Dernier message: 14/02/2007, 22h28
  4. Impossible d'écrire dans une classe
    Par NoiBe dans le forum NetBeans
    Réponses: 1
    Dernier message: 28/12/2006, 17h33
  5. Réponses: 1
    Dernier message: 01/12/2005, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo