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

ASP.NET Discussion :

ExecuteNonQuery() & Violation of PRIMARY


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Par défaut ExecuteNonQuery() & Violation of PRIMARY
    Bonjour,
    J'utilise un code c# pour importer des données du fichier texte vers ma base de donnée.

    le code fonctionne mais j'ai un problème lors la duplication d'un clé primaire.
    Je cherche comment ajouter un test,Si n'existe pas ajouter SInon n'ajouter pas.

    voici mon code et la ligne en rouge qui génère l'erreur.
    [SqlException (0x80131904): Violation of PRIMARY KEY constraint 'PK_airnode'. Cannot insert duplicate key in object 'dbo.airnode'
    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
    StringBuilder insertCmd = new StringBuilder();
    
            string line;
            string[] myData;
            string[] delimiter = { "," };
    
            // Read the file and display it line by line.
            System.IO.StreamReader file = new System.IO.StreamReader("c:\\air.stat");
            while ((line = file.ReadLine()) != null)
            {
                myData = line.Split(delimiter, StringSplitOptions.None);
    
                insertCmd.Append("INSERT INTO airnode VALUES(");
                insertCmd.Append("'" + myData[0] + "', ");
                insertCmd.Append(myData[1] + ", ");
                insertCmd.Append(myData[2] + ", ");
                insertCmd.Append(myData[3] + ", ");
                insertCmd.Append(myData[4] + ", ");
                insertCmd.Append(myData[5] + ", ");
                insertCmd.Append(myData[6] + ", ");
                insertCmd.Append(myData[7] + ", ");
                insertCmd.Append(myData[8] + ") ");
            }
    
            file.Close();
    
            SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SecurityTutorials.mdf;Integrated Security=True;User Instance=True");
            SqlCommand cmd;
            con.Open();
            cmd = new SqlCommand(insertCmd.ToString(), con);
            cmd.CommandType = CommandType.Text;
            int affectedRows = cmd.ExecuteNonQuery();
            con.Close();
    Merci de m'aider

  2. #2
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Tu peux faire d'abord un select count(*) pour savoir si ta donnée existe. Suivant le résultat tu fais un update ou un insert.

    NB : utilises plutôt une requête paramétrée afin de sécuriser ton accès à la base de données

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Tu peux faire d'abord un select count(*) pour savoir si ta donnée existe. Suivant le résultat tu fais un update ou un insert.
    Et encapsuler le tout dans une PS car il serait un peu bizarre de faire un A/R Client-Serveur pour cette opération.

    NB : utilises plutôt une requête paramétrée afin de sécuriser ton accès à la base de données
    En plus, oui; il faudrait mettre cette phase en automatique

  4. #4
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Et encapsuler le tout dans une PS car il serait un peu bizarre de faire un A/R Client-Serveur pour cette opération.
    Oui en effet, ce serait encore l'étape suivante

  5. #5
    Membre chevronné Avatar de Pilru
    Homme Profil pro
    Dev ASP.NET/jQuery ; Admin ORACLE
    Inscrit en
    Septembre 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev ASP.NET/jQuery ; Admin ORACLE

    Informations forums :
    Inscription : Septembre 2007
    Messages : 491
    Par défaut
    Inclure ton code dans un Try...Catch évitera au framework .NET de lancer automatiquement l'exception.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Pilru Voir le message
    Inclure ton code dans un Try...Catch évitera au framework .NET de lancer automatiquement l'exception.
    Intercepter une exception sur clef dupliquée ne saurait constituer une méthode recommandable de design d'application.

    Pour être plus clair, c'est complétement pourrave de procéder ainsi.

    Si au taf je devais trouver ça dans un dev lors d'une revue de code, l'auteur se ferait sérieusement souffler dans les bronches.

Discussions similaires

  1. [2012] MERGE - Violation of PRIMARY KEY constraint
    Par vinch999 dans le forum Développement
    Réponses: 2
    Dernier message: 21/01/2015, 10h35
  2. Réponses: 2
    Dernier message: 21/10/2014, 15h44
  3. [2008] Erreur d'exécution d'un lot SSIS: violation de Primary key
    Par lamen0031 dans le forum SSIS
    Réponses: 3
    Dernier message: 07/02/2013, 13h06
  4. Violation of Primary Key sans données
    Par Baquardie dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 26/01/2010, 19h41
  5. Violation of PRIMARY KEY constraint
    Par DEV-10 dans le forum Développement
    Réponses: 6
    Dernier message: 30/11/2009, 15h01

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