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 de données (datagridview)


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut insertion de données (datagridview)
    Bonjour,
    j'ai créer un bouton pour insérer les données saisie par les utilisateurs dans mon
    datagridview, j'ai utilisé le code suivant:
    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
    SqlConnection BaseProjet1ConnectionString2 = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet1.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
     
     
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;
     
                cmd.CommandText = "INSERT INTO employee (id, nom, prenom) VALUES (@id, @nom, @prenom)";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjet1ConnectionString2;
     
                BaseProjet1ConnectionString2.Open();
     
                reader = cmd.ExecuteReader();
                // Data is accessible through the DataReader object here.
     
                BaseProjet1ConnectionString2.Close();
    ça m'affiche l'erreur suivante:
    La variable scalaire "@id" doit être déclarée.
    au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     reader = cmd.ExecuteReader();
    PS: j'ai réussi à le faire avec des textbox en utilisant la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cmd.CommandText = "INSERT employee (id, nom, prenom) VALUES ('"+idTextBox.Text+"', '"+nomTextBox.Text+"', '"+prenomTextBox.Text+"')";
    merci pour votre aide

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Il faur créér les paramètres correspondant aux @xxx.

    Voir ici : http://webman.developpez.com/article...ter/csharp/#L3

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 386
    Points
    386
    Par défaut
    je suis en accord avec Graffito

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,
    j'ai crée les paramètres correspondant aux @xx, mais ça m'affiche l'erreur suivante:
    La requête paramétrée '(@id int,@nom nvarchar(4000),@prenom nvarchar(4000))INSERT INTO' attend le paramètre @id, qui n'a pas été fourni.
    voici mon 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
    SqlConnection BaseProjetConnectionString = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;
                string requete; 
     
                requete = "INSERT  INTO employee (id, nom, prenom) VALUES (@id, @nom, @prenom)";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjetConnectionString;
                SqlParameter para = new SqlParameter("@id", SqlDbType.Int, 5);
                SqlParameter param = new SqlParameter("@nom", SqlDbType.NVarChar, 20);
                SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.NVarChar, 20);
                cmd.Parameters.Add(para);
                cmd.Parameters.Add(param);
                cmd.Parameters.Add(paramo);
                cmd.CommandText = requete;
     
                BaseProjetConnectionString.Open();
                reader = cmd.ExecuteReader();
                // Data is accessible through the DataReader object here.
                BaseProjetConnectionString.Close();
    merci

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlParameter para = new SqlParameter("@id", SqlDbType.Int, 5, "id" );

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlParameter para = new SqlParameter("@id", SqlDbType.Int, 5, "id" );
    je l'ai essayer mais ça n'a rien changé, toujours la même erreur

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Est-ce que id est une variable auto-incrémentée ?

    Si c'est le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd.CommandText = "INSERT INTO employee (nom, prenom) VALUES (@nom, @prenom)+
                              " SET @id =  SCOPE_IDENTITY()" ;       
    //...
    para.Direction = System.Data.ParameterDirection.Output;
    Remarque :
    La fonction ExecuteReader est normalement destinée à des command SELECT.
    pour des INSERT INTO , on utiliserait ExecuteNonQuery();

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Remarque :
    La fonction ExecuteReader est normalement destinée à des command SELECT.
    pour des INSERT INTO , on utiliserait ExecuteNonQuery();
    ok, j'ai utilisé ExecuteNonQuery() mais ça m'affiche le message d'erreur suivant:
    Impossible de convertir implicitement le type 'int' en 'System.Data.SqlClient.SqlDataReader'
    j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters["@id"].Value = Convert.ToInt32(para);
    mais ça n'a rien changé

    mon 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
     SqlConnection BaseProjetConnectionString = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;
     
                cmd.CommandText  = "INSERT  INTO employee (id, nom, prenom) VALUES (@id, @nom, @prenom)";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjetConnectionString;
                SqlParameter para = new SqlParameter("@id", SqlDbType.Int, 5);
                SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
                SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
     
                cmd.Parameters["@id"].Value = Convert.ToInt32(para);
                cmd.Parameters["@nom"].Value = param;
                cmd.Parameters["@prenom"].Value = paramo;
     
                BaseProjetConnectionString.Open();
                reader = cmd.ExecuteNonQuery();
                BaseProjetConnectionString.Close();
    merci

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Points : 115
    Points
    115
    Par défaut
    Salut,

    Ton champs ID est-il auto-incrémenté?
    Si c'est le cas, peux-tu essayer en retirant le paramètre ID.
    Comme ca :

    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
    SqlConnection BaseProjetConnectionString = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;
     
                cmd.CommandText  = "INSERT  INTO employee (nom, prenom) VALUES (@nom, @prenom)";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjetConnectionString;
                SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
                SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
     
                cmd.Parameters["@nom"].Value = param;
                cmd.Parameters["@prenom"].Value = paramo;
     
                BaseProjetConnectionString.Open();
                reader = cmd.ExecuteNonQuery();
                BaseProjetConnectionString.Close();

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Salut,
    Citation Envoyé par dogua Voir le message
    Ton champs ID est-il auto-incrémenté?
    oui,
    Si c'est le cas, peux-tu essayer en retirant le paramètre ID.
    Comme ca :

    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
    SqlConnection BaseProjetConnectionString = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;
     
                cmd.CommandText  = "INSERT  INTO employee (nom, prenom) VALUES (@nom, @prenom)";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjetConnectionString;
                SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
                SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
     
                cmd.Parameters["@nom"].Value = param;
                cmd.Parameters["@prenom"].Value = paramo;
     
                BaseProjetConnectionString.Open();
                reader = cmd.ExecuteNonQuery();
                BaseProjetConnectionString.Close();
    je l'ai essayé mais ça n'a rien changé,
    j'ai essayer aussi:
    Citation Envoyé par Graffito Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd.CommandText = "INSERT INTO employee (nom, prenom) VALUES (@nom, @prenom)+
                              " SET @id =  SCOPE_IDENTITY()" ;       
    //...
    para.Direction = System.Data.ParameterDirection.Output;
    toujours la même erreur

  11. #11
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Nb_lignes_affectees = cmd.ExecuteNonQuery();

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Nb_lignes_affectees = cmd.ExecuteNonQuery();
    j'ai fait:
    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
    SqlConnection BaseProjet2ConnectionString = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet2.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
                SqlCommand cmd = new SqlCommand();
                int Nb_lignes_affectees = 3;
     
     
               cmd.CommandText = "INSERT INTO employee (nom, prenom) VALUES (@nom, @prenom)" ;
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjet2ConnectionString;
     
                SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
                SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
     
                cmd.Parameters["@nom"].Value = param;
                cmd.Parameters["@prenom"].Value = paramo;
     
                BaseProjet2ConnectionString.Open();
                Nb_lignes_affectees = cmd.ExecuteNonQuery();
                BaseProjet2ConnectionString.Close();
    mais ça n'a rien changé

  13. #13
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Tu ne devrais plus avoir ce message :
    Impossible de convertir implicitement le type 'int' en 'System.Data.SqlClient.SqlDataReader'
    Quelle est maintenant l'erreur ?

    Et aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, "Martin" );
    SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, "Henri" );

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Quelle est maintenant l'erreur ?
    Un SqlParameter avec ParameterName '@nom' n'est pas contenu dans ce SqlParameterCollection.
    au niveau de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cmd.Parameters["@nom"].Value = param;

  15. #15
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    J'avais pas vu que tu avais changé l'ajout de paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd.Parameters["@nom"].Value = param;
    cmd.Parameters["@prenom"].Value = paramo;
    Il faut revenir à la version initiale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cmd.Parameters.Add(param);
    cmd.Parameters.Add(paramo);

  16. #16
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    en revenant à la version initiale:
    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
     SqlConnection BaseProjet2ConnectionString = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\BaseProjet2.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
     
                SqlCommand cmd = new SqlCommand();
                int Nb_lignes_affectees = 3; 
     
               cmd.CommandText = "INSERT INTO employee (nom, prenom) VALUES (@nom, @prenom)" ;
                cmd.CommandType = CommandType.Text;
                cmd.Connection = BaseProjet2ConnectionString;
     
                SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
                SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
     
                cmd.Parameters.Add(param);
                cmd.Parameters.Add(paramo);
     
                BaseProjet2ConnectionString.Open();
                Nb_lignes_affectees = cmd.ExecuteNonQuery();
                BaseProjet2ConnectionString.Close();
    ça affiche le msg d'erreur:
    La requête paramétrée '(@nom varchar(20),@prenom varchar(20))INSERT INTO employee (nom,' attend le paramètre @nom, qui n'a pas été fourni.
    au niveau de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Nb_lignes_affectees = cmd.ExecuteNonQuery();

  17. #17
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
    SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
    cmd.Parameters.Add(param);
    cmd.Parameters.Add(paramo);
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SqlParameter param = new SqlParameter("@nom", SqlDbType.VarChar, 20);
    SqlParameter paramo = new SqlParameter("@prenom", SqlDbType.VarChar, 20);
    param .Value="Martin" ;
    paramo.Value="Henri" ;
    cmd.Parameters.Add(param);
    cmd.Parameters.Add(paramo);

  18. #18
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    ça marche, mais ici il va enregistrer "Henri" et "Martin" et non les données saisie par l'utilisateur

  19. #19
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param .Value= NomTextBox.Text ;

  20. #20
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Graffito Voir le message
    param .Value= NomTextBox.Text ;
    ça c'est dans le cas d'un textbox, moi en faite j'utilise un datagridview

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. DatagridView problème insertion de données
    Par bouguima001 dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/01/2011, 10h43
  2. insertion des données dans datagridview
    Par hr1985 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/08/2010, 16h37
  3. Réponses: 3
    Dernier message: 23/12/2009, 15h00
  4. probleme d'insertion des données dans un datagridview
    Par meryDev dans le forum Windows Forms
    Réponses: 0
    Dernier message: 20/06/2009, 14h14
  5. dataGridView et insertion des données
    Par etoile_de_vie dans le forum C#
    Réponses: 4
    Dernier message: 06/05/2008, 10h37

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