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 de paramètre dans un UpdateCommand


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut Problème de paramètre dans un UpdateCommand
    Salut,

    Dans une table j'ai une colonne PointCumulatif en bool.
    J'ai créé un UpdateCommande que voici
    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
                UpdateCommand.CommandText = "UPDATE `Ligne` " +
                                               "SET `NumeroPoint1` = ?, " +
                                                   "`NumeroPoint2` = ?, " +
                                                   "`Distance` = ?, " +
                                                   "`Rayon` = ?, " +
                                                   "`Centre` = ?, " +
                                                   "`PointCumulatif` = ?, " +
                                                   "`NoSinueuse` = ? " +
                                            "WHERE (((? = 1 AND `NuméroForme` IS NULL) OR (`NuméroForme` = ?)) " +
                                               "AND (`NuméroLigne` = ?) " +
                                               "AND ((? = 1 AND `NumeroPoint1` IS NULL) OR (`NumeroPoint1` = ?)) " +
                                               "AND ((? = 1 AND `NumeroPoint2` IS NULL) OR (`NumeroPoint2` = ?)) " +
                                               "AND ((? = 1 AND `Distance` IS NULL) OR (`Distance` = ?)) " +
                                               "AND ((? = 1 AND `Rayon` IS NULL) OR (`Rayon` = ?)) " +
                                               "AND ((? = 1 AND `Centre` IS NULL) OR (`Centre` = ?)) " +
                                               "AND ((? = 1 AND `NoSinueuse` IS NULL) OR (`NoSinueuse` = ?)))";
                UpdateCommand.Parameters.Clear();
                UpdateCommand.Parameters.Add(new OleDbParameter("NumeroPoint1", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "NumeroPoint1", DataRowVersion.Current, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("NumeroPoint2", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "NumeroPoint2", DataRowVersion.Current, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Distance", OleDbType.Double, 0, ParameterDirection.Input, false, 0, 0, "Distance", DataRowVersion.Current, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Rayon", OleDbType.Double, 0, ParameterDirection.Input, false, 0, 0, "Rayon", DataRowVersion.Current, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Centre", OleDbType.VarWChar, 0, ParameterDirection.Input, true, 0, 0, "Centre", DataRowVersion.Current, null));
                InsertCommand.Parameters.Add(new OleDbParameter("PointCumulatif", OleDbType.Boolean, 0, ParameterDirection.Input, false, 0, 0, "PointCumulatif", DataRowVersion.Current, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("NoSinueuse", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "NoSinueuse", DataRowVersion.Current, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_NuméroForme", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "NuméroForme", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_NuméroForme", OleDbType.Integer, 0, ParameterDirection.Input, true, 0, 0, "NuméroForme", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_NuméroLigne", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "NuméroLigne", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_NumeroPoint1", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "NumeroPoint1", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_NumeroPoint1", OleDbType.VarWChar, 0, ParameterDirection.Input, true, 0, 0, "NumeroPoint1", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_NumeroPoint2", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "NumeroPoint2", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_NumeroPoint2", OleDbType.VarWChar, 0, ParameterDirection.Input, true, 0, 0, "NumeroPoint2", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_Distance", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Distance", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_Distance", OleDbType.Double, 0, ParameterDirection.Input, true, 0, 0, "Distance", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_Rayon", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Rayon", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_Rayon", OleDbType.Double, 0, ParameterDirection.Input, true, 0, 0, "Rayon", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_Centre", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Centre", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_Centre", OleDbType.VarWChar, 0, ParameterDirection.Input, true, 0, 0, "Centre", DataRowVersion.Original, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("IsNull_NoSinueuse", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "NoSinueuse", DataRowVersion.Original, true, null));
                UpdateCommand.Parameters.Add(new OleDbParameter("Original_NoSinueuse", OleDbType.Integer, 0, ParameterDirection.Input, true, 0, 0, "NoSinueuse", DataRowVersion.Original, null));
    À l'update, l'erreur suivante sort :
    Aucune valeur donnée pour un ou plusieurs des paramètres requis.
    J'ai constaté que l'erreur disparaît lorsque j'enlève "`PointCumulatif` = ?, ", et bien entendu le paramètre qui lui est lié, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InsertCommand.Parameters.Add(new OleDbParameter("PointCumulatif", OleDbType.Boolean, 0, ParameterDirection.Input, false, 0, 0, "PointCumulatif", DataRowVersion.Current, null));
    A la lecture de l'erreur, on dirait que le paramètre n'est pas lié à la colonne, mais je ne vois pas pourquoi il ne le serait pas. J'ai essayé aussi d'ajouter "PointCumulatif" dans
    source de la colonne, mais rien n'y fait.

    Quel est le problème ?
    Ça fait un sérieux bout que je cherche et je suis à cours d'idées.

    Merci de vos z'avis z'avisés.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    ce paramètre n'a pas comme valeur NULL alors que la colonne est en NOT NULL ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Je suis d'accord, mais il est sensé aller chercher l'info dans la colonne, non ?
    J'ai essayé de remplacer null par true ou par false et aussi d'autoriser le null dans le paramètre, mais dans tous les cas, l'erreur est la même.
    En fait on dirait que le paramètre n'arrive pas à se connecter aux données de la colonne, mais je ne comprend pas pourquoi.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Mais tes paramètres la tu les déclares bien avec la valeur NULL ?
    Tu leur attribues une valeur plus tard ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Oui, en fait c'est parce que je pars d'un DataSet fortement typé, donc avec des tableAdapter.
    A la création j'ai choisi la concurrence optimiste et c'est très bien. Mes command ont été générés automatiquement.
    Ce à quoi je veux en venir c'est que lorsque la concurrence optimiste bloque l'update, j'envois un message d'avertissement signalant que les données ont été modifiées depuis le chargement et je demande si on veut écraser quand-même.
    Si l'utilisateur répond oui, il me faut des command sans concurrence.
    J'ai donc créé dans mon tableAdapter une fonction public void ConcurrencyUsed() et une fonction public void ConcurrencyNotUsed() que j'appelle selon le besoin et qui me recrée les command nécessaire.

    Pour monter des fonctions j'ai récupéré les string des command qui ont été générées automatiquement (pourquoi réinventer la roue ?) et j'ai récupéré (à la main) les données de chacun des paramètres pour les recréer.
    Et c'est sans doute là que quelque chose est différent pour ce paramètre, mais j'ai beau tourner l'appli avec le command généré automatiquement et récupérer les valeurs du paramètre, je n'arrive pas à trouver la différence.

    J'ai bien essayé de mettre le isnullable à true et de mettre value à false et à true, rien n'y fait.

    Merci du temps que tu passes à essayer de m'aider.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/10/2007, 15h45
  2. Problème de concurrence dans mon updateCommand
    Par Freygolo dans le forum VB.NET
    Réponses: 7
    Dernier message: 07/06/2007, 08h32
  3. Réponses: 1
    Dernier message: 06/03/2007, 11h57
  4. Problème avec paramètres dans un <messagebundle>
    Par imagine64 dans le forum JSF
    Réponses: 6
    Dernier message: 12/02/2007, 17h27
  5. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53

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