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

Windows Forms Discussion :

Enregistrer des données dans une base de donnée


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Enregistrer des données dans une base de donnée
    Je rencontre le problème de formatage dans mon code c#. L'erreur: Le format de la chaîne d'entrée est incorrect

    Voici e code source:
    private void EnregistrerBtn_Click(object sender, System.EventArgs e)
    {
    try
    {
    if (TxArticle.Text == "" || TxPrix.Text == "" || CbxCategorie.SelectedIndex == -1 || TxStock.Text == "")
    {
    MessageBox.Show("Veuillez renseigner obligatoirement les champs remarquants.");
    }
    else
    {
    string article = TxArticle.Text;
    int prix = Convert.ToInt32(TxPrix.Text);
    int categorie = Convert.ToInt32(CbxCategorie.SelectedValue.ToString());
    int stock = Convert.ToInt32(TxStock.Text);
    string expDate = TxDate.Value.ToString("dd/MM/yyyy"); // Format de date correct

    string req = "INSERT INTO ArticlesTbl (Article, Prix, Categorie, Stock, ExpDate) VALUES ('{0}', {1}, {2}, {3}, '{4}')";
    req = string.Format(req, article.Replace("'", "''"), prix, categorie, stock, expDate); // Échappement des apostrophes
    Con.EnvoyerDonnees(req);
    AfficherArticles();
    MessageBox.Show("Article ajouté avec succès !!!");
    TxArticle.Text = "";
    TxPrix.Text = "";
    CbxCategorie.SelectedIndex = -1;
    TxStock.Text = "";
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 284
    Points : 12 983
    Points
    12 983
    Par défaut
    Bonjour,
    Peux-tu nous donnée le texte de la requête une fois celle-ci formattée (donc le contenu de req) ?

    Tatayo.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 344
    Points : 1 961
    Points
    1 961
    Par défaut
    Utilise des requêtes préparées, c'est moins problématique.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    using System;
    using System.Data;
    using System.Data.SqlClient;

    namespace SP_MARKET
    {
    internal class Fonctions
    {
    private SqlConnection Con;
    private SqlCommand Cmd;
    private DataTable dt;
    private string ConString;

    public Fonctions()
    {
    ConString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\USER\Documents\SuperMarcheBD.mdf;Integrated Security=True;Connect Timeout=30";
    Con = new SqlConnection(ConString);
    Cmd = new SqlCommand { Connection = Con };
    }

    public DataTable RecupererDonnees(string Req)
    {
    dt = new DataTable();

    try
    {
    using (SqlDataAdapter Sda = new SqlDataAdapter(Req, Con))
    {
    // Ouvrir la connexion si elle est fermée
    if (Con.State == ConnectionState.Closed)
    {
    Con.Open();
    }

    // Remplir le DataTable
    Sda.Fill(dt);
    }
    }
    catch (Exception ex)
    {
    // Gérer les exceptions (journaliser, afficher un message, etc.)
    Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
    }
    finally
    {
    // Fermer la connexion si elle est ouverte
    if (Con.State == ConnectionState.Open)
    {
    Con.Close();
    }
    }

    return dt;
    }

    public int EnvoyerDonnees(string Req)
    {
    int cnt = 0;

    try
    {
    // Ouvrir la connexion si elle est fermée
    if (Con.State == ConnectionState.Closed)
    {
    Con.Open();
    }

    Cmd.CommandText = Req;
    cnt = Cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
    // Gérer les exceptions (journaliser, afficher un message, etc.)
    Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
    }
    finally
    {
    // Fermer la connexion si elle est ouverte
    if (Con.State == ConnectionState.Open)
    {
    Con.Close();
    }
    }

    return cnt;
    }

    internal void Close()
    {
    throw new NotImplementedException();
    }

    internal void Open()
    {
    throw new NotImplementedException();
    }

    internal void EnvoyerDonnees()
    {
    throw new NotImplementedException();
    }
    }
    }

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    using System;
    using System.Data;
    using System.Data.SqlClient;

    namespace SP_MARKET
    {
    internal class Fonctions
    {
    private SqlConnection Con;
    private SqlCommand Cmd;
    private DataTable dt;
    private string ConString;

    public Fonctions()
    {
    ConString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\USER\Documents\SuperMarcheBD.mdf;Integrated Security=True;Connect Timeout=30";
    Con = new SqlConnection(ConString);
    Cmd = new SqlCommand { Connection = Con };
    }

    public DataTable RecupererDonnees(string Req)
    {
    dt = new DataTable();

    try
    {
    using (SqlDataAdapter Sda = new SqlDataAdapter(Req, Con))
    {
    // Ouvrir la connexion si elle est fermée
    if (Con.State == ConnectionState.Closed)
    {
    Con.Open();
    }

    // Remplir le DataTable
    Sda.Fill(dt);
    }
    }
    catch (Exception ex)
    {
    // Gérer les exceptions (journaliser, afficher un message, etc.)
    Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
    }
    finally
    {
    // Fermer la connexion si elle est ouverte
    if (Con.State == ConnectionState.Open)
    {
    Con.Close();
    }
    }

    return dt;
    }

    public int EnvoyerDonnees(string Req)
    {
    int cnt = 0;

    try
    {
    // Ouvrir la connexion si elle est fermée
    if (Con.State == ConnectionState.Closed)
    {
    Con.Open();
    }

    Cmd.CommandText = Req;
    cnt = Cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
    // Gérer les exceptions (journaliser, afficher un message, etc.)
    Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
    }
    finally
    {
    // Fermer la connexion si elle est ouverte
    if (Con.State == ConnectionState.Open)
    {
    Con.Close();
    }
    }

    return cnt;
    }

    internal void Close()
    {
    throw new NotImplementedException();
    }

    internal void Open()
    {
    throw new NotImplementedException();
    }

    internal void EnvoyerDonnees()
    {
    throw new NotImplementedException();
    }
    }
    }

    c'est la requête que j'ai préparé.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 284
    Points : 12 983
    Points
    12 983
    Par défaut
    Ce que tu nous montres est du code C#, pas une requête SQL…

    Tatayo.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    public class GestionDonnees
    {
    private SqlConnection Con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename="C:\\Users\\USER\\source\\repos\\SP MARKET\\SP MARKET\\SuperMarcheBD.mdf";Integrated Security=True;Connect Timeout=30");

    public void EnregistrerArticle(string nomArticle, int prix, int categorie, int stock, DateTime dateExpiration)
    {
    Con.Open();
    string Req = "INSERT INTO ArticlesTbl (ArtNom, ArtPrix, ArtCategorie, ArtStock, ArtExpDate) VALUES (@ArtNom, @ArtPrix, @ArtCategorie, @ArtStock, @ArtExpDate)";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtNom", nomArticle);
    command.Parameters.AddWithValue("@ArtPrix", prix);
    command.Parameters.AddWithValue("@ArtCategorie", categorie);
    command.Parameters.AddWithValue("@ArtStock", stock);
    command.Parameters.AddWithValue("@ArtExpDate", dateExpiration);
    command.ExecuteNonQuery();
    Con.Close();
    }

    public void ModifierArticle(int idArticle, string nomArticle, int prix, int categorie, int stock, DateTime dateExpiration)
    {
    Con.Open();
    string Req = "UPDATE ArticlesTbl SET ArtNom = @ArtNom, ArtPrix = @ArtPrix, ArtCategorie = @ArtCategorie, ArtStock = @ArtCategorie, ArtExpDateExp = @ArtExpDateExp WHERE ArtCode = @ArtCode";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtCode", idArticle);
    command.Parameters.AddWithValue("@ArtNom", nomArticle);
    command.Parameters.AddWithValue("@ArtPrix", prix);
    command.Parameters.AddWithValue("@ArtCategorie", categorie);
    command.Parameters.AddWithValue("@ArtStock", stock);
    command.Parameters.AddWithValue("@ArtExpDate", dateExpiration);
    command.ExecuteNonQuery();
    Con.Close();
    }

    public void SupprimerArticle(int idArticle)
    {
    Con.Open();
    string Req = "DELETE FROM ArticlesTbl WHERE ArtCode = @ArtCode";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtCode", idArticle);
    command.ExecuteNonQuery();
    Con.Close();
    }

    public DataTable FiltrerArticlesParCategorie(int CatCode)
    {
    Con.Open();
    string Req = "SELECT * FROM ArticlesTbl WHERE ArtCategorie = @ArtCategorie";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtCategorie", CatCode);
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    Con.Close();
    return dt;
    }

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 344
    Points : 1 961
    Points
    1 961
    Par défaut
    et utilises le bouton # pour insérer ton code afin de le rendre plus lisible aussi
    On veut savoir ce que contient ta variable req juste avant son exécution dans la base de données (ou au moment de l'erreur).
    Mais je réitère qu'il serait préférable de passer par des requêtes préparées.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    public class GestionDonnees
    {
    private SqlConnection Con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename="C:\\Users\\USER\\source\\repos\\SP MARKET\\SP MARKET\\SuperMarcheBD.mdf";Integrated Security=True;Connect Timeout=30");

    public void EnregistrerArticle(string nomArticle, int prix, int categorie, int stock, DateTime dateExpiration)
    {
    Con.Open();
    string Req = "INSERT INTO ArticlesTbl (ArtNom, ArtPrix, ArtCategorie, ArtStock, ArtExpDate) VALUES (@ArtNom, @ArtPrix, @ArtCategorie, @ArtStock, @ArtExpDate)";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtNom", nomArticle);
    command.Parameters.AddWithValue("@ArtPrix", prix);
    command.Parameters.AddWithValue("@ArtCategorie", categorie);
    command.Parameters.AddWithValue("@ArtStock", stock);
    command.Parameters.AddWithValue("@ArtExpDate", dateExpiration);
    command.ExecuteNonQuery();
    Con.Close();
    }

    public void ModifierArticle(int idArticle, string nomArticle, int prix, int categorie, int stock, DateTime dateExpiration)
    {
    Con.Open();
    string Req = "UPDATE ArticlesTbl SET ArtNom = @ArtNom, ArtPrix = @ArtPrix, ArtCategorie = @ArtCategorie, ArtStock = @ArtCategorie, ArtExpDateExp = @ArtExpDateExp WHERE ArtCode = @ArtCode";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtCode", idArticle);
    command.Parameters.AddWithValue("@ArtNom", nomArticle);
    command.Parameters.AddWithValue("@ArtPrix", prix);
    command.Parameters.AddWithValue("@ArtCategorie", categorie);
    command.Parameters.AddWithValue("@ArtStock", stock);
    command.Parameters.AddWithValue("@ArtExpDate", dateExpiration);
    command.ExecuteNonQuery();
    Con.Close();
    }

    public void SupprimerArticle(int idArticle)
    {
    Con.Open();
    string Req = "DELETE FROM ArticlesTbl WHERE ArtCode = @ArtCode";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtCode", idArticle);
    command.ExecuteNonQuery();
    Con.Close();
    }

    public DataTable FiltrerArticlesParCategorie(int CatCode)
    {
    Con.Open();
    string Req = "SELECT * FROM ArticlesTbl WHERE ArtCategorie = @ArtCategorie";
    SqlCommand command = new SqlCommand(Req, Con);
    command.Parameters.AddWithValue("@ArtCategorie", CatCode);
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    Con.Close();
    return dt;
    }


    Voilà la requête que je viens de préparer mais toujours le même problème

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 344
    Points : 1 961
    Points
    1 961
    Par défaut
    on n'a toujours que ton code, pas la requête en elle-même, c'est-à-dire avec les valeurs des paramètres (à mon avis ça doit coincer sur la date (si de type DATE, dans les bases c'est sous la forme YYYY-MM-ff, mais avec la requête préparée ça ne devrait pas posé de souci il me semble.
    Tu es sûr que le message d'erreur est le même ? et tu peux reconfirmer à qu'el endroit se situe l'erreur ? (désactive les try/catch pour être sûr de l'endroit où se produit l'erreur)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Sinon je m’excuse pour le dérangement
    Je suis débutant c’est la raison

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2024
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    CREATE TABLE [dbo].[ArticlesTbl] (
    [ArtCode] INT IDENTITY (100, 1) NOT NULL,
    [ArtNom] VARCHAR (100) NOT NULL,
    [ArtPrix] INT NOT NULL,
    [ArtCategorie] INT NOT NULL,
    [ArtStock] INT NOT NULL,
    [ArtExpDate] DATE NOT NULL,
    PRIMARY KEY CLUSTERED ([ArtCode] ASC),
    CONSTRAINT [FK1] FOREIGN KEY ([ArtCategorie]) REFERENCES [dbo].[CategorieTbl] ([CatCode])
    );

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 284
    Points : 12 983
    Points
    12 983
    Par défaut
    Toujours pas...
    On veut le code de la requête qui insert les données en base (insert into...).
    Bref dans ton premier code le contenu de la variable req juste avant l'appel à Con.EnvoyerDonnees(req).

    Et dans le dernier le "contenu" de command juste avant command.ExecuteNonQuery(). Mais là je ne sais pas comment on fait.

    Tatayo.

  14. #14
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 793
    Points : 5 578
    Points
    5 578
    Par défaut
    Le problème ne se situe pas sur la requête.
    Il se trouve sur la chaine de connexion.

    private SqlConnection Con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename="C:\\Users\\USER\\source\\repos\\SP MARKET\\SP MARKET\\SuperMarcheBD.mdf";Integrated Security=True;Connect Timeout=30");

    Ces guillemets ne devraient pas se trouver là.
    D'ailleurs, c'est bizarre que ça compile en l'état.

    Pour faciliter les choses, tu peux passer par la classe SqlConnectionStringBuilder.

Discussions similaires

  1. Enregistrer des donnees dans une base access
    Par mmidox dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/03/2010, 14h59
  2. enregistrer des données dans une base avec jboss jbpm
    Par paolo2002 dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 19/09/2007, 12h56
  3. Enregistrer des données dans une base de donnée
    Par fabienlege dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/04/2007, 17h34
  4. Ouvrir, Enregistrer des textbox dans une base de donnee ( DEBUTANT!)
    Par macfly77 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 01/12/2006, 14h21
  5. Réponses: 4
    Dernier message: 26/09/2006, 12h42

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