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

Accès aux données Discussion :

nom de variable déjà déclaré lors d'une réinsertion


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 8
    Points
    8
    Par défaut nom de variable déjà déclaré lors d'une réinsertion
    Bonjour ,

    je me redirige vers vous car je bloque qu niveau de mon projet pfe , mon probleme est le suivant j ai un fichier excel que je charge dans un datagagrid pour ensuite l enregistré dans une base de donnée sql , la premiere fois sa passe nike .Mais dés que je reteclecharge un nouveau fichier et que je veux l enregistré sa bloque et on me sort le le msg d'erreur suivant : Le nom de variable '@Cola1' a déjà été déclaré. Les noms de variables doivent être uniques dans un traitement de requêtes ou une procédure stockée.si je quitte mon appli et que je me reconnecte sa passe son prob je sais pas ou sa bloke ?!

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
       cmd.CommandText = "INSERT  INTO Applications (nom_app, Description_de_application, Statut)  VALUES    (@Cola1, @Cola2, @Cola3 )"
     
                    cmd.Connection = cn
     
                    ''    ' Add Parameters to Command Parameters collection
     
                    cmd.Parameters.Add("@Cola1", SqlDbType.VarChar, 255)
     
                    cmd.Parameters.Add("@Cola2", SqlDbType.VarChar, 255)
     
                    cmd.Parameters.Add("@Cola3", SqlDbType.VarChar, 30)
     
                    'Dim x As Integer = 0
     
                    For x = 0 To DataGridView1.Rows.Count - 2
     
                        If DataGridView1.Rows(x + 1).Cells(0).Value = DataGridView1.Rows(x).Cells(0).Value Then
     
                            cmd.Parameters("@Cola1").Value = DataGridView1.Rows(x).Cells(0).Value.ToString
     
                            cmd.Parameters("@Cola2").Value = DataGridView1.Rows(x).Cells(1).Value.ToString
     
                            cmd.Parameters("@Cola3").Value = DataGridView1.Rows(x).Cells(2).Value.ToString
     
                            cmd.ExecuteNonQuery()
     
                        End If
     
                    Next
     
                    MessageBox.Show("Vous pouvez enregistrer", "Enregistrement !!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
     
                End If

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tout d'abord merci de penser à utiliser la balise CODE, ça facilite la lecture du code.

    Concernant ton problème, effectivement c'est parce que tu dois avoir une séquence structurée comme cela au premier appel :
    - Instanciation de l'objet cmd
    - Ajout des paramètres
    - Ajout des valeurs aux paramètres

    Lors du second appel, ta séquence se déroule comme cela :
    - Ajout des paramètres
    - Ajout des valeurs aux paramètres

    Là où ça bloque c'est à l'étape "Ajout des paramètres", puisqu'ils existent déjà. Donc tu as deux options :
    - Soit tu instancies un nouvel objet cmd à chaque fois que tu appelles ce bout de code :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cmd = New SqlCommand("requete", sqlConnexion)
    - Soit tu vides la liste des paramètres à chaque fois que tu appelles ce bout de code, à l'aide de :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters.Clear()
    En tout cas c'est un bon reflexe d'avoir utilisé une requête paramétrée. Tu peux encore pousser plus loin en utilisant l'instruction Using.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Merci bcp pour ta reponse !
    En effet il fallait que je vide la liste des paramètres à chaque fois . et sa Marche

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Tout d'abord merci de penser à utiliser la balise CODE, ça facilite la lecture du code.

    Concernant ton problème, effectivement c'est parce que tu dois avoir une séquence structurée comme cela au premier appel :
    - Instanciation de l'objet cmd
    - Ajout des paramètres
    - Ajout des valeurs aux paramètres

    Lors du second appel, ta séquence se déroule comme cela :
    - Ajout des paramètres
    - Ajout des valeurs aux paramètres

    Là où ça bloque c'est à l'étape "Ajout des paramètres", puisqu'ils existent déjà. Donc tu as deux options :
    - Soit tu instancies un nouvel objet cmd à chaque fois que tu appelles ce bout de code :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cmd = New SqlCommand("requete", sqlConnexion)
    - Soit tu vides la liste des paramètres à chaque fois que tu appelles ce bout de code, à l'aide de :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters.Clear()
    En tout cas c'est un bon reflexe d'avoir utilisé une requête paramétrée. Tu peux encore pousser plus loin en utilisant l'instruction Using.
    Bonjour DotNetMatt,
    svp je suis tompé sur la meme erreur mais je ne sais pas ou placer cmd.Parameters.Clear()
    Merci d'avance

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Si tu es dans le même cas alors il faut mettre cela à la fin de la boucle For ou ForEach. Sinon, poste ton code pour qu'on puisse y jeter un oeil.

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

Discussions similaires

  1. Créer un nom de variable qui s'incrémente dans une boucle
    Par Pietro_L dans le forum Général VBA
    Réponses: 3
    Dernier message: 09/05/2007, 16h10
  2. Réponses: 3
    Dernier message: 14/02/2007, 11h37
  3. Réponses: 3
    Dernier message: 01/12/2004, 10h43
  4. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 08h27

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