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

Développement Windows Discussion :

SQL UPDATE marche sur Management Studio, pas en csharp.


Sujet :

Développement Windows

  1. #1
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juillet 2013
    Messages
    580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juillet 2013
    Messages : 580
    Points : 1 604
    Points
    1 604
    Par défaut SQL UPDATE marche sur Management Studio, pas en csharp.
    Bonjour à tous,

    Je vais devenir dingue !! Je suis en train de dev une appli en Microsoft SQL et je viens de mettre en place ma première requête UPDATE.
    Le souci, c'est qu'elle ne modifie rien dans le table, alors que si je ctrl-c/ctrl-v cette requête dans Management studio, tout fonctionne à merveille.
    Est-ce que l'un de vous a une idée de ce qu'il se passe ?

    Merki !

    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 void change_ticket_user(string ticketid, string id_utilisateur)
    {
        try
        {
            SqlTransaction transactie = null;
            string stmt = "UPDATE dbo.Tickets SET idutilisateur = @new_util Where id = @ticket_to_search";
            con.ConnectionString = "Data Source=FREYA;Initial Catalog=FREYA;Integrated Security=SSPI;";
            if (con.State != ConnectionState.Open) con.Open();
            SqlCommand cmd = new SqlCommand(stmt, con, transactie);
     
            // Je précise qu'ici, j'ai déjà essayé de séparer le ADD (avec le type SQL) et l'attribution de la valeur.
            cmd.Parameters.AddWithValue("@new_util", id_utilisateur);
            cmd.Parameters.AddWithValue("@ticket_to_search", ticketid);
     
     
            // ICI: affiche 1. Ce qui veut dire qu'il a trouvé l'entrée qui correspond au ticketid
            MessageBox.Show("result:" + cmd.ExecuteNonQuery());
            con.Close();
        }
        catch (SqlException exc)
        {
            MessageBox.Show("Erreur d'escalade : " + exc.Message);
        }
    }
    edit: Je précise qu'une autre requête identique, mais qui modifie toutes les colonnes, fonctionne bien....
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 022
    Points : 4 111
    Points
    4 111
    Par défaut
    Il semble que tu utilises une transaction : SqlTransaction transactie = null;
    Il faut que tu fasse un commit de ta transaction avant de fermer ta connection :
    Après dans ton cas la transaction n'est pas utile, c'est bien quand tu fais plusieurs opération pour éviter les changement si l'une d'elle plante et utilise des using ca t'evitera de gérer la fermeture de ta connexion a la main

  3. #3
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juillet 2013
    Messages
    580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juillet 2013
    Messages : 580
    Points : 1 604
    Points
    1 604
    Par défaut
    Merci pour ta réponse.

    La transaction était pour test, j'ai oublié de la virer avant le copier/coller...
    Merci pour le conseil des usings, je l'appliquerai partout.
    Comme j'ai mentionné dans le edit, la même requête modifiant toutes les valeurs fonctionne bien...
    Je vais quand-même réécrire cette fonction avec test conseils et voir, mais à mon avis ça risque d'être pareil...

    Merci encore.
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 022
    Points : 4 111
    Points
    4 111
    Par défaut
    Citation Envoyé par SkyZoThreaD Voir le message
    Merci pour ta réponse.

    La transaction était pour test, j'ai oublié de la virer avant le copier/coller...
    Merci pour le conseil des usings, je l'appliquerai partout.
    Comme j'ai mentionné dans le edit, la même requête modifiant toutes les valeurs fonctionne bien...
    Je vais quand-même réécrire cette fonction avec test conseils et voir, mais à mon avis ça risque d'être pareil...

    Merci encore.
    justement c'est le faite de pas commité ta transaction qui fait que tu n'as pas la modif en bdd

  5. #5
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juillet 2013
    Messages
    580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juillet 2013
    Messages : 580
    Points : 1 604
    Points
    1 604
    Par défaut
    Bon, j'ai suivi tes conseils, mais ça ne marche pas mieux...
    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
     
            public void change_ticket_user(string ticketid, string id_utilisateur)
            {
                try
                {
                    using (SqlConnection conn = new SqlConnection(FreyaConnectionString))
                    {
                        if (conn.State != ConnectionState.Open) conn.Open();
                        SqlCommand cmd = new SqlCommand("UPDATE dbo.Tickets SET idutilisateur=@idutilisateur WHERE id=@idticket", conn);
     
                        cmd.Parameters.Clear();
     
                        cmd.Parameters.Add("@idutilisateur", SqlDbType.VarChar);
                        cmd.Parameters.Add("@idticket", SqlDbType.UniqueIdentifier);
     
                        cmd.Parameters["@idutilisateur"].Value = id_utilisateur_from_prenom(id_utilisateur);
                        cmd.Parameters["@idticket"].Value = new Guid(ticketid);
     
     
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                catch (SqlException exc)
                {
                    MessageBox.Show("Erreur de mise à jour de ticket : " + exc.Message);
                }
            }
    Alors que cette fonction marche bien:
    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
     
    public void modifier_ticket(string idcliwavesoft, string appelant, string prénom_utilisateur, string description, string resolution, string status, string ticket_id)
            {
                try
                {
                    using (SqlConnection conn = new SqlConnection(FreyaConnectionString))
                    {
                        if (conn.State != ConnectionState.Open) conn.Open();
                        SqlCommand cmd = new SqlCommand("UPDATE dbo.Tickets SET idclient=@idclient, appelant=@appelant, idutilisateur=@idutilisateur, descriptif=@descriptif, resolution=@resolution, status=@status WHERE id=@idticket", conn);
                        cmd.Parameters.Clear();
     
                        cmd.Parameters.Add("@idclient", SqlDbType.Int);
                        cmd.Parameters.Add("@appelant", SqlDbType.NVarChar);
                        cmd.Parameters.Add("@idutilisateur", SqlDbType.VarChar);
                        cmd.Parameters.Add("@descriptif", SqlDbType.NVarChar);
                        cmd.Parameters.Add("@resolution", SqlDbType.NVarChar);
                        cmd.Parameters.Add("@status", SqlDbType.NVarChar);
                        cmd.Parameters.Add("@idticket", SqlDbType.UniqueIdentifier);
     
                        cmd.Parameters["@idclient"].Value = Int32.Parse(idcliwavesoft);
                        cmd.Parameters["@appelant"].Value = appelant;
                        cmd.Parameters["@idutilisateur"].Value = id_utilisateur_from_prenom(prénom_utilisateur);
                        cmd.Parameters["@descriptif"].Value = description;
                        cmd.Parameters["@resolution"].Value = resolution;
                        cmd.Parameters["@status"].Value = status;
                        cmd.Parameters["@idticket"].Value = new Guid(ticket_id);
     
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                catch (SqlException exc)
                {
                    MessageBox.Show("Erreur de mise à jour de ticket : " + exc.Message);
                }
            }
    Au moins, les usings rendent le code bien plus lisible et propre
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  6. #6
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juillet 2013
    Messages
    580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juillet 2013
    Messages : 580
    Points : 1 604
    Points
    1 604
    Par défaut
    PEBCAK ALERT !!!!

    C'était évidemment une connerie.... Je le savais avant même de poster...
    Il y avait un deuxième appel de cette fonction avec l'id de l'ancien utilisateur....
    Donc il revenait à l'état d'origine....

    Merci youtpout978

    @++
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 022
    Points : 4 111
    Points
    4 111
    Par défaut
    j'allais te dire ton code est correct peut être tu remets la même valeur

    avec le using pas besoin de close ta connection l'using appel automatiquement la fonction dispose de ton objet

  8. #8
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juillet 2013
    Messages
    580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juillet 2013
    Messages : 580
    Points : 1 604
    Points
    1 604
    Par défaut
    C'est noté

    Merci à toi.
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

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

Discussions similaires

  1. Calcul marche sur IE mais pas sur Firefox
    Par Akim13 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2008, 18h22
  2. Bloc PL/SQL qui marche en 9i mais pas en 10g ?
    Par Milo59000 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 21/05/2008, 17h10
  3. code qui marche sur firefox et pas sur IE7
    Par taka10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/03/2007, 11h59
  4. Réponses: 2
    Dernier message: 06/06/2005, 15h13
  5. Réponses: 2
    Dernier message: 04/06/2004, 11h11

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