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

Windows Forms Discussion :

Question d'un nouveau sur UpdateCommand


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Points : 54
    Points
    54
    Par défaut Question d'un nouveau sur UpdateCommand
    Je suis a modifier le code d'un ancien programmeur dans une application VB.NET et lorsque je vais dans l'UpdateCommand du TableAdapter, ça me donne quelquechose comme ça :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE       Table
    SET                ALERTNO = ?, Date = ?, NOTES = ?
    WHERE        (? = 1 AND ALERTNO IS NULL OR
                             ALERTNO = ?) AND (? = 1 AND Date IS NULL OR
                             Date = ?)

    Et je me questionnais sur la validité du code... est-ce moi ou c,est pas normal les "?=1 AND...", qu'est-ce qu'un "1" fait la dedans?

    Seulement pour vérifier si je suis fou ou non??!

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Ça ressemble à une chaine paramétrée pour un SGBD ne supportant pas les paramètres nommés (exemple ancienne version de PostGreSql).

    Quel est le SGBD utilisé et, le cas échéant, le provider utilisé ?

    Quel est le code d'exécution de cette requête ?

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    Je suis en VB.NET (2005) et les données sont sur un serveur SQL 7.0.

    J'ai un DataSet (.xsd) avec un paquet de tables, l'ancien employé a laissé le projet a moitié terminé. J'essai de trouver un sens au garbage que j'ai devant moi. J'ai une base, très basique, en VB.NET.

    Dans mon DataSet j'ai des tables et des TableAdapters. Dans mon TableAdapter j'ai la propriété UpdateCommand qui se divise en trois :
    • CommandType
    • CommandText
    • Parameters


    Le CommandType contient le statement SQL, et c'est là que je retrouve le "? = 1" et je me demande ce qui devrait être vraiment là dans le CommandType...

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    C'est une ruse pour permettre de requêter soit en passant ALERTNO, date, les 2 ou aucun.
    Il manque des parenthéses pour que cela soit bien clair :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE 
    (
    ( ? = 1 AND ALERTNO IS NULL ) OR ALERTNO = ?
    )
    AND
    (
    (? = 1 AND Date IS NULL) OR Date = ?
    )
    Il y a donc 4 façons d'utiliser cette requête, avec des paramétres différents pour récupérer les enregistrements avec :
    ALERTNO = null et Date = null
    ALERTNO non null et Date = null
    ALERTNO null et Date non null
    ALERTNO non null et Date non null
    A la volée, je suppose que ceux sont 2 champs de filtre facultatif dans une form.

    C'est toute la difficulté de gérer les champs Nullable car comme on le sait Null c'est rien, donc à part faire un "IS NULL", pour les récupérer c'est pas évident.

    Cdt.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    J'ai continué de lire sur le sujet, ça me semble beaucoup plus facile de gérer les update et insert à partir d'une stored procedure.

    Est-ce que je me trompe?

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    Dans mon form j'ai le code suivant pour mettre à jour l'enregistrement à l'écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Me.Validate()
    Me.TBLKekChoseSBindingSource.EndEdit()
    Me.TBLKekChoseTableAdapter.Update(Me.KekChoseDataSet.TBLKekChose)
    Et ça me donne l'erreur suivante :
    ERROR [07S01] [Microsoft][ODBC SQL Server Driver]Utilisation non valide du paramètre par défaut

    Au début, je me disais que c'était peut-être le UpdateCommand qui n'était pas fait correctement...

  7. #7
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Pour les proc stockées, ça me semble pas forcément plus facile mais par contre plus difficile à maintenir à terme --> tu ajoutes un champs à une table, il faut que tu modifies ta proc (insert, update et delete en fait) et le code du projet.
    Donc 3 impacts : table + proc + projet.
    avec autant de sources d'erreurs possibles.

    La proc stockée, je la vois plus comme un traitement de données que l'on peut déléguer complétement à la base (--> type traitement batch par exemple), ou à laquelle on confie une tâche d'agrégation de donnée (j'entend par là fournir un résultat consolidée de n données sur n table), qui n'aurait pas de plus-value étant faite dans l'appli et permettrait de limiter le volume remonter par la base (exemple : balance des crédits/débits d'un client calculées à partir des mouvements sur le compte --> pas la peine de remonter toutes les lignes de mouvements à l'appli pour faire du cumul conditionné alors qu'un proc peut le faire et ne rendre que le résultat).

    Par contre pour l'erreur, je sèche ...

    Cdt.

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    J'ai créé une stored proc car je ne trouvais aucune autre solution, j'ai monté le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim myConnection As SqlConnection = New SqlConnection(strConnectionString)
    Dim objCommand As SqlCommand = New SqlCommand("usp_UpdateTable", myConnection)
     
            objCommand.CommandType = CommandType.StoredProcedure
            objCommand.Parameters.AddWithValue("@NoID", Me.txtNoID.Text)
            myConnection.Open()
            Dim reader As SqlDataReader = objCommand.ExecuteReader()
            reader.Close()
            myConnection.Close()
    Maintenant tout fonctionne. Les mises-à-jour sont plus simples avec une SP.

    Merci

  9. #9
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    J'ai vu ton autre post sur l'alim du Datagrid, j'en dis que la proc stockée pour ce que tu veux faire c'est inutile et que finalement ça va te faire trimer comme une bête pour rien !

    Replonges-toi dans le dataadapter et le commandbuilder, ça te facilitera la vie.

    Cdt.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/03/2011, 18h12
  2. Nouveau sur Android / questions diverses
    Par atari dans le forum Android
    Réponses: 1
    Dernier message: 21/01/2011, 10h59
  3. Nouveau sur XML cherche à comprendre un truck...
    Par shadowbob dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 11/02/2006, 17h10
  4. Question "pas si bête" sur le protocole SNMP
    Par arsenik7 dans le forum Développement
    Réponses: 3
    Dernier message: 02/01/2006, 12h49
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 11h35

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