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 :

Requete SQL qui fonctionne dans un cas et pas dans un autre


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Points : 68
    Points
    68
    Par défaut Requete SQL qui fonctionne dans un cas et pas dans un autre
    Bonjour,
    En faisant des manipulations sur ma base de données en fait j'ai voulu supprimer quelques lignes d'une table puis faire un Insert ce qui m’inquiète que dans un cas ca marche et dans un autre j'ai un échec d'insertion en base de données ca vient du changement de la requete delete.

    je vais citer le cas de succés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    StringBuilder requeteSeances = new StringBuilder();
     
                requeteSeances.Append("INSERT INTO `seance` VALUES(1, 5, '2012-04-14', '19:00:00', 15, 'SALLE       05') ");
                WrkData.ExecuteCommande("DELETE FROM SEANCE WHERE No_Semaine >=" + iSemaine.ToString());    
     
     
                if (WrkData.ExecuteCommande(requeteSeances.ToString().Substring(0, requeteSeances.Length - 1)))
                {
                    lblMsg.Text = "Insertion faite avec succés";
                }
                else
                {
                    lblMsg.Text = "echec ";
                }
    Pour le second cas je modifie juste ma requête delete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WrkData.ExecuteCommande("DELETE FROM SEANCE WHERE Id_Film IN (Select num From films)");
    Voici aussi
    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
     public static bool ExecuteCommande(string Commande)
            {
                string connStr = ConfigurationParameters.GetConnectionString(ConnectionStrings.ADOLConnString);
                OdbcConnection odbcConn = new OdbcConnection(connStr);
     
                try
                {
                    odbcConn.Open();
     
                    OdbcCommand ocomm = new OdbcCommand(Commande, odbcConn);
                    OdbcDataReader oread = ocomm.ExecuteReader();
                    oread.Read();
     
                    return true;
                }
                catch (System.Data.Odbc.OdbcException odbcEx)
                {
                    return false;
                }
                finally
                {
                    odbcConn.Close();
                    odbcConn = null;
                }
            }
    PS:J'ai essayé de tester les requêtes sous MySql et ça marche bien

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Et quelle est l'erreur remontée ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Points : 68
    Points
    68
    Par défaut
    Il fallait que je change la valeur de retour de la fonction ExecuteCommande
    mon code est devenu commme suit
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    WrkData.ExecuteCommande("DELETE FROM SEANCE WHERE Id_Film IN (Select num From films)");
     
     
                if (WrkData.executecommand(requeteSeances.ToString().Substring(0, requeteSeances.Length - 1)) == "ok")
                {
                    lblMsg.Text = "Insertion faite avec succés";
                }
                else
                {
     
                    lblMsg.Text = WrkData.executecommand(requeteSeances.ToString().Substring(0, requeteSeances.Length - 1));
                }
            public static string executecommand( string commands)
            {
                string connstr=ConfigurationParameters.GetConnectionString(ConnectionStrings.ADOLConnString);
                OdbcConnection odbConn = new OdbcConnection(connstr);
                try
                {
                    odbConn.Open();
                    OdbcCommand ocom = new OdbcCommand(commands, odbConn);
                    OdbcDataReader oread = ocom.ExecuteReader();
                    oread.Read();
                    return ("ok");
     
                }
                catch (System.Data.Odbc.OdbcException odbcEx)
                {
                    return odbcEx.ToString();
                }
            }
     
            public static bool ExecuteCommande(string Commande)
            {
                string connStr = ConfigurationParameters.GetConnectionString(ConnectionStrings.ADOLConnString);
                OdbcConnection odbcConn = new OdbcConnection(connStr);
     
                try
                {
                    odbcConn.Open();
     
                    OdbcCommand ocomm = new OdbcCommand(Commande, odbcConn);
                    OdbcDataReader oread = ocomm.ExecuteReader();
                    oread.Read();
     
                    return true;
                }
                catch (System.Data.Odbc.OdbcException odbcEx)
                {
                    return false;
                }
                finally
                {
                    odbcConn.Close();
                    odbcConn = null;
                }
            }
    voici l'erreur remontée
    System.Data.Odbc.OdbcException: ERROR [23000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.8-log]Duplicate entry '1-2-2011-07-27-23:59:00' for key 'PRIMARY' à System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) à System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod) à System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader) à System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior) à System.Data.Odbc.OdbcCommand.ExecuteReader() à DatronicOnline.AdminConsole.DAL.WrkData.executecommand(String commands)

  4. #4
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    Duplicate entry '1-2-2011-07-27-23:59:00' for key 'PRIMARY'
    ...ce n'est donc pas à proprement parlé un problème .NET. Utilise plutôt comme clé primaire un entier autoincrémenté.

    Accessoirement si ta méthode ne retourne aucun résultat issue de MySql tu peux faire directement appel à la méthode ExecuteNonQuery() sur ton objet OdbcCommand au lieu de ExecuteReader().

    Pascal

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Visiblement il s'agit d'un problème sur ta clé primaire, est-ce que tu es sûr que la ligne que tu insères est bien supprimée par ta deuxième requête (i.e est-ce que le numéro de film que tu spécifies dans l'insertion est bien présent dans la table Films, et est-ce que tu ne t'es pas trompé dans tes colonnes?)

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Points : 68
    Points
    68
    Par défaut
    @_PascalC_: pour
    Utilise plutôt comme clé primaire un entier autoincrémenté.
    mais si je suis obligé de ne pas changer la structure de la table( car si non je devrais ajouter une colonne) y a t-il une autre solution

    Concernant
    Accessoirement si ta méthode ne retourne aucun résultat issue de MySql tu peux faire directement appel à la méthode ExecuteNonQuery() sur ton objet OdbcCommand au lieu de ExecuteReader()
    ma fonction retourne bien false en cas d'échec mais ne remonte pas l'erreur c'est pour cela je viens de la modifier
    @H1B4K:Quand tu disais
    est-ce que tu es sûr que la ligne que tu insères est bien supprimée par ta deuxième requête
    bah je viens de rajouter ce code pour etre sur que j'ai le meme comportement de la requete de succés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WrkData.executecommand("DELETE FROM SEANCE WHERE No_Semaine >=" + iSemaine.ToString() + "AND Id_Film IN(Select num From films)");

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Et avec celle-là pas d'erreur?

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Points : 68
    Points
    68
    Par défaut
    Toujours la meme erreur mais quand ma requete était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WrkData.executecommand("DELETE FROM SEANCE WHERE No_Semaine >=" + iSemaine.ToString()
    ça marchait

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Est-ce que tu peux me donner les résultats d'un SELECT * FROM Films et un SELECT * FROM Seance avec les noms des colonnes si possible? (s'il y a pas trop de données)

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Points : 68
    Points
    68
    Par défaut
    C'est résolu, je savais que ca venait de la requete de suppression au final ma requete a cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WrkData.executecommand("DELETE FROM SEANCE WHERE Id_Film IN(Select num From films) AND No_semaine >=" + iSemaine.ToString());
    merci pour vos interactions.

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Punaise j'viens de voir... les espaces avant tes guillemets, t'en as pas mis, tu m'étonnes que ca marchait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "DELETE FROM SEANCE WHERE No_Semaine >=" + iSemaine.ToString() + "AND Id_Film IN(Select num From films)");
    => .... No_Semaine>=36AND Id_Film ....

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

Discussions similaires

  1. [XL-2007] Macro qui fonctionne sur un poste mais pas sur un autre
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/06/2012, 10h24
  2. pourquoi cela fonctionne dans un cas et pas dans l'autre ?
    Par Attila54 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 01/10/2010, 15h40
  3. Réponses: 0
    Dernier message: 24/06/2010, 15h10
  4. Pourquoi Free fonctionne dans un cas et pas dans l'autre
    Par BuzzLeclaire dans le forum Langage
    Réponses: 8
    Dernier message: 25/01/2009, 14h04
  5. requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/03/2007, 09h37

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