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 :

Insertion des données en c# [Débutant]


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Insertion des données en c#
    Bonjour à tous,

    Je suis nouveau ici et je souhaiterai avoir un petit coup de pouce en programmation.

    Je m'explique tout d'abord, via un formulaire j'aimerai insérer les données dans ma base, mais voila en cliquant sur le bouton ajouté de mon formulaire j'ai un message comme quoi mes colonnes ne sont pas les mm que dans la base.

    Merci à tous ceux qui veulent bien m'aider.

    voici l'extrait de mon code :

    Code C# : 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
    public partial class FenAjoutClient : Form
        {
            OleDbDataAdapter oDataAdapter;
     
            public FenAjoutClient()
            {
                InitializeComponent();
            }
     
            private void bt_Ajouter_Click(object sender, EventArgs e)
            {
                //variables local
                OleDbConnection oConnexion;
                OleDbCommand oCommande;
                DataSet ds;
                DataRow nouvelleLigne;
     
                //Création de la connexion
                oConnexion = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\Administrateur\Desktop\Northwind.mdb");
     
                //Ouverture de la connextion 
                oConnexion.Open();
     
                //Création de la commande
                oCommande = new OleDbCommand("INSERT INTO Customers (CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", oConnexion);
     
                //Création et paramètrage du DataAdapter
                oDataAdapter = new OleDbDataAdapter(oCommande);
                OleDbCommandBuilder oCommandeBuilder = new OleDbCommandBuilder(oDataAdapter);
     
                //Création de la table de données
                ds = new DataSet();
                nouvelleLigne = new DataTable("Customers").NewRow();
     
                //EXecution de la rêquette et remplissage de la table
                nouvelleLigne["CustomerID"] = this.txtbox_NumCli;
                nouvelleLigne["CompanyName"] = this.txtbox_CompagnieName;
                nouvelleLigne["ContactName"] = this.txtbox_ContactName;
                nouvelleLigne["ContactTitle"] = this.txtbox_TitreContact;
                nouvelleLigne["Address"] = this.txtbox_Adresse;
                nouvelleLigne["Region"] = this.txtbox_Region;
                nouvelleLigne["PostalCode"] = this.txtbox_Cp;
                nouvelleLigne["Country"] = this.txtbox_Contry;
                nouvelleLigne["Phone"] = this.txt_phone;
                nouvelleLigne["Fax"] = this.txtbox_Fax;
     
                //Remplissage de la ligne
                ds.Tables["Customers"].Rows.Add(nouvelleLigne);
     
                //Fermeture de la connexion
                oConnexion.Close();
     
            }
        }

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    le message exact serait beaucoup plus pratique qu'un résumé ...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Le message exacte c'est :

    <La colonne 'CustomerID' n'appartient pas à la table Customers>.

    c'est pareil pour toutes les colonnes.

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

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut,
    j'ai jamais utilisé cette syntaxe pour ajouter une ligne dans un table d'un bdd mais il me semble qu'avant d'ajouter une ligne dans une DataTable il faut ajouter les colonnes.
    A mon avis ta ligne contient 0 colonne et donc quand tu demandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvelleLigne["CustomerID"]
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvelleLigne["Address"]
    tu auras cette erreur.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    salut,

    quelle syntaxe utilises tu pour accéder à une bdd et à ajouter une ligne via des textbox pcq je galère tjrs autant pour le faire. Il me reste juste c'est point la à faire pour avancer dans mon apprentissage car j'arrive à afficher, modifier et supprimer des données mais pas en rajouter.. Merci.

  6. #6
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Attention,

    En consultant cette page du MSDN, on peut constater que le constructeur de la classe OleDbDataAdapter peut prendre un OleDbCommand en paramètre mais pour la requête de sélection.

    Hors dans le code ci dessous tu y affectes la requête d'insertion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Création de la commande
    oCommande = new OleDbCommand("INSERT INTO Customers (CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", oConnexion);
     
    //Création et paramètrage du DataAdapter
    oDataAdapter = new OleDbDataAdapter(oCommande);
    OleDbCommandBuilder oCommandeBuilder = new OleDbCommandBuilder(oDataAdapter);
    De plus, dans cet article également du msdn, on peut y voir l'information suivante :

    OleDbDataAdapter ne génère pas automatiquement les instructions SQL requises pour l'harmonisation des modifications apportées à DataSet avec la source de données associée. Cependant, vous pouvez créer un objet OleDbCommandBuilder pour générer automatiquement des instructions SQL pour des mises à jour de table simple si vous définissez la propriété SelectCommand de OleDbDataAdapter. Ensuite, les instructions SQL supplémentaires que vous ne définissez pas sont générées par OleDbCommandBuilder.
    Donc perso j'essaierais (code non testé pour la syntaxe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
    //Création de la commande de sélection
    oCommandeSelect = new OleDbCommand("SELECT * FROM Customers", oConnexion);
     
    //Création et paramètrage du DataAdapter
    oDataAdapter = new OleDbDataAdapter(oCommandeSelect);
     
    OleDbCommandBuilder oCommandeBuilder = new OleDbCommandBuilder(oDataAdapter);
     
    //Création de la table de données
    ds = new DataSet();
    oDataAdapter.Fill(ds,"Customers");
    ...
    A tester mais cela me parait logique

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    la méthode pour faire un insert c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim cmd as new dbcommand(laconnexion)
    cmd.commandtext = "insert into ..."
    cmd.parameters.Add( ...
     
    cmd.Executenonquery
    rien de plus et d'inutile comme passer par un dataset, un dataadapter ou autre
    ca ne fait que rallonger le code et le traitement pour le même résultat
    ca sert à créer la requete, et ca fait executenonquery, si vous avez déjà la requete ca ne sert donc à rien

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    infosam76 oui je sais qu' une partie de mon code vient de msdn et c'est justement pcq je chercher la solution la bas. la base de données que j'utilise est la base nortwind mais la n'est pas l'importance pcq mon but et de savoir comment je fais via un formulaire d'une de mes fenêtres insérer une ligne de données dans ma table.

    J'ai bien évidemment testé avec la requête de sélection mais rien ne marcher malgré tout. je pensais qu'une méthode insert exister pour le réaliser mais apparemment pas.. pour un update j'ai juste fait ca :

    oDataAdapter.Update(ds,"Customers");

    et ca marche très bien :-)

    Pol63 si j'ai bien compris ton raisonnement je ne dois pas utilisé cette ligne :

    oDataAdapter.Fill(ds,"Customers");

  9. #9
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Non en fait Pol63 t'as donné la méthode pour exécuter ta requête sans passer par un dataadapter.

    En gros tu crées ton objet DbCommand avec ta requête d'insertion et tu exécutes la méthode Executenonquery de cet objet

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci j'ai trouvé la solution

  11. #11
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Peux tu nous la faire partager, et ensuite marquer la discussion en résolue ;-)

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Dsl du retard car je suis en ce moment en exam.

    Voici le code :
    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
     
    // variable local
                OleDbCommand oCommande;
                oCommande = new OleDbCommand();
     
                OleDbConnection oConnexion;
                oConnexion = new OleDbConnection();
     
                DataSet ds;
                ds = new DataSet();
     
                DataRow nouvelleLigne;
                nouvelleLigne = new DataRow();
     
                OleDbDataAdapter oDataAdapter;
                oDataAdapter = new OleDbDataAdapter();
     
                oConnexion.ConnectionString = (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\Administrateur\Desktop\Northwind.mdb");
     
                //Ouverture de la connextion 
                oCommande.Connection = oConnexion;
     
                //Création de la commande
                oCommande.CommandText = "INSERT INTO Customers (CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
     
                //paramètrage de l'adpater 
                oDataAdapter.SelectCommand = oCommande;
     
                //EXecution de la rêquette et remplissage de la ligne
                nouvelleLigne = ds.Tables["Customers"].NewRow();

  13. #13
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Ton problème est normal vu que tu affectes une requête INSERT dans la propriété SelectCommand de ton Adapter.

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

Discussions similaires

  1. insertion des données ds des tables
    Par taroudant dans le forum Oracle
    Réponses: 2
    Dernier message: 18/12/2006, 10h59
  2. [MySQL] Problème à l'insertion des données en BDD
    Par carelha dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/11/2006, 14h31
  3. [ASE 12.5][WIN]insertion des données
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 12/06/2006, 18h28
  4. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 12h17
  5. [C#] problème avec l'insertion des données dans MySQL
    Par madica dans le forum Accès aux données
    Réponses: 7
    Dernier message: 08/11/2005, 13h27

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