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 :

Probléme sur savechange() [Débutant]


Sujet :

C#

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Probléme sur savechange()
    Bonjour, j'ai un soucis avec mon projet de site e-commerce, je dois mettre à jour mon stock après la commande d'un client mais une fois que j'arrive au savechange() j'ai une erreur "la référence d'objet n'est pas défini à une instance d'objet". J'ai pourtant bien vérifier il n'y a rien de null il me récupère bien le produit et modifie bien le stock mais il ne veux pas m'enregistrer la modification (Je précise que je n'est pas de problème avec ma connexion à la bdd car juste avant il m'enregistre bien la commande en bdd.
    Voici mon code pour la maj du stock.

    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
     
    protected void btnretour_Click(object sender, EventArgs e)
            {
                int idcom = (int)ViewState["idcom"];
     
                List<Commande_Produit> com = (from c in bdd.Commande_Produit
                                where c.idCommande == idcom
                                select c).ToList();
     
     
                foreach(Commande_Produit cs in com)
                {
                    Produit prod = (from c in bdd.Produits
                                    where c.idProduit == cs.idProduit
                                    select c).FirstOrDefault();
     
                    if (prod != null)
                    {
                        int? newstock = prod.Stock - cs.Quantite;
                        prod.Stock = (int)newstock;
                    }
     
                    bdd.SaveChanges();
     
     
                }
     
            }
    Si quelqu'un à la solution il me sauverait la vie, merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Pourtant il y a bien quelque chose qui est null mais sans autres informations dur de t'aider.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Il vous faut quoi comme information supplémentaire ?

  4. #4
    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 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Normalement ton exception doit contenir au moins une exception de type System.Data.Entity.Validation.DbEntityValidationException.

    Sur ce type, tu vas trouver une propriete EntityValidationErrors. Regarde ca en utilisant le debugger, ca devrait te donner plus d'info sur le probleme...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Nom : pb1.PNG
Affichages : 237
Taille : 21,6 Ko
    Nom : jj.PNG
Affichages : 233
Taille : 26,5 Ko

    Voici mon exception et le detail.

  6. #6
    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 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Est-ce que bdd est null ??

    Si ca n'est pas null, peux-tu poster le contenu complet de la stack trace dans l'exception ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    La bdd n'est pas null


    à System.Web.UI.ParseChildrenAttribute.GetHashCode()
    à System.Collections.Generic.ObjectEqualityComparer`1.GetHashCode(T obj)
    à System.Linq.Set`1.InternalGetHashCode(TElement value)
    à System.Linq.Set`1.Find(TElement value, Boolean add)
    à System.Linq.Enumerable.<ExceptIterator>d__73`1.MoveNext()
    à System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
    à System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
    à System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider.<GetAttributes>b__3(PropertyInfo pi)
    à System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
    à System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider.GetAttributes(PropertyInfo propertyInfo)
    à System.Data.Entity.Internal.Validation.EntityValidatorBuilder.BuildPropertyValidator(PropertyInfo clrProperty)
    à System.Data.Entity.Internal.Validation.EntityValidatorBuilder.BuildValidatorsForProperties(IEnumerable`1 clrProperties, IEnumerable`1 edmProperties, IEnumerable`1 navigationProperties)
    à System.Data.Entity.Internal.Validation.EntityValidatorBuilder.BuildTypeValidator[T](Type clrType, IEnumerable`1 edmProperties, IEnumerable`1 navigationProperties, Func`3 validatorFactoryFunc)
    à System.Data.Entity.Internal.Validation.EntityValidatorBuilder.BuildEntityValidator(InternalEntityEntry entityEntry)
    à System.Data.Entity.Internal.Validation.ValidationProvider.GetEntityValidator(InternalEntityEntry entityEntry)
    à System.Data.Entity.Internal.InternalEntityEntry.GetValidationResult(IDictionary`2 items)
    à System.Data.Entity.DbContext.ValidateEntity(DbEntityEntry entityEntry, IDictionary`2 items)
    à System.Data.Entity.DbContext.GetValidationErrors()
    à System.Data.Entity.Internal.InternalContext.SaveChanges()
    à System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
    à System.Data.Entity.DbContext.SaveChanges()
    à LafermedeLescure.Commander.btnretour_Click(Object sender, EventArgs e) dans C:\Users\Proprietaire\Desktop\la ferme de l'escur\LafermedeLescure\LafermedeLescure\Commander.aspx.cs:ligne 166
    à System.Web.UI.WebControls.Button.OnClick(EventArgs e)
    à System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
    à System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
    à System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
    à System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
    à System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

  8. #8
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    [HS]
    Copie/colle ici du texte, pas des captures d'écran, c'est bien mieux, merci
    [/HS]

  9. #9
    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 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    On peut essayer la chose suivante :

    Remplace bdd.SaveChanges(); par ce qui suit :
    Code C# : 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
            try
            {
                bdd.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                var outputLines = new List<string>();
     
                foreach (var eve in e.EntityValidationErrors)
                {
                    outputLines.Add($"{DateTime.Now}: Entity of type \"{eve.Entry.Entity.GetType().Name}\" in state \"{eve.Entry.State}\" has the following validation errors:");
                    outputLines.AddRange(eve.ValidationErrors.Select(ve => $"- Property: \"{ve.PropertyName}\", Error: \"{ve.ErrorMessage}\""));
                }
     
                throw;
            }


    Est-ce que l'exception est catchee ? Si oui, que vois-tu dans l'objet outputLines ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    L'exception s'arrête sur le try

  11. #11
    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 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Merci pour l'envoi du projet en prive. Mon bloc try/catch ci-dessus n'est pas du tout utile.

    Premiere chose, il manquait un appel a la methode AddOrUpdate() :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (prod != null)
    {
        int? newstock = prod.Stock - cs.Quantite;
        prod.Stock = (int)newstock;
     
        bdd.Produits.AddOrUpdate(prod);
    }
    Mais ca n'etait pas l'origine du probleme…

    L'origine du probleme c'est que tu as une table qui s'appelle Produit et une page qui s'appelle Produit. Lorsque Entity Framework genere la classe partielle Produit pour representer la table. Il cree cette classe a la racine du namespace : LafermedeLescure.Produit. Or a cet endroit, ta page partielle "Produit" existe deja, et ca plante a l'execution. Donc pour resoudre l'exception NullPointerException, il faut :
    1 - Renommer la page Produit.aspx
    2 - Renommer la classe dans le fichier .aspx.cs (et ensuite dans le .aspx).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

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

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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