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

VB.NET Discussion :

[VB.NET/SQL SERVER]Problème Update avec SqlCommand


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut [VB.NET/SQL SERVER]Problème Update avec SqlCommand
    Bonjour,

    j'essaie de mettre à jour une ligne via VB.NET mais il n'y a pas moyen, ce que je ne comprends pas, la même requête dans la consol Sql Server s'execute parfaitement quand je lui donne des valeurs manuellement.
    Mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      ...
     strRequete = "UPDATE articles SET acode=" & txtCode.Text & "," & "apack=" & pack & "WHERE idarticle=" & Val(lblSKU.Text)
            Dim cmdUpdateSku As New SqlCommand(strRequete, cnx)
            cnx.Open()
            cmdUpdateSku.ExecuteNonQuery()
            cnx.Close() ...
    Quand j'execute j'ai l'erreur :

    Syntaxe incorrecte vers le mot clé 'WHERE'
    PS : pack est une variable où je récupère le résulat d'une zone de text avec une condition.

    Merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    oui, le where est collé à ce qu'il y a avant !

    "apack=" & pack & "WHERE idarticle="

    ici il faut un espace
    "apack=" & pack & " WHERE idarticle="


    dans des cas comme ca, on fait un espion express sur le sqlcommand pour récupérer le commandtext et on le colle dans sql server studio management pour voir




    sinon il faut utiliser des sql parameter pour les raison suivantes (au moins) :

    si l'utilisateur met des apostrophes dans le textbox, ta requete plante, car il faut doubler les ' dans une requete sql
    les sql parameter s'occupe de convertir ces machins et autre truc
    (si tu fais des replace de ' en 2x ' ca peut marcher certes)

    maintenant, plus drole, si l'utilisateur entre dans le textbox :
    'GO DELETE FROM articles GO'

    et en concaténant tu te retrouves avec une belle injection SQL comme on appelle ca, et c'est pas top (cela dit un drop database est encore plus drôle)


    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    strRequete = "UPDATE articles SET acode = @acode, apack = @apack WHERE idarticle = @idarticle" 
     
    cmdUpdateSku.parameters.add("@acode",typesql).value = txtCode.Text
    cmdUpdateSku.parameters.add("@apack ",typesql).value = pack 
    cmdUpdateSku.parameters.add("@apack ",typesql).value = lblSKU.Text
     
    cmdUpdateSku.executenonquery
    typesql est a remplacé par le type dans la base de données



    NB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdUpdateSku.parameters.add("@acode",typesql).value = txtCode.Text
    est la manière de l'écrire en une ligne, mais il y a plein d'autres facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim p as new sqlparameter("@acode",typesql)
    p.value = ""
    cmdUpdateSku.parameters.add(p)
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cmdUpdateSku.parameters.add("@acode",typesql)
    cmdUpdateSku.parameters("@acode").value = ""
    en fait le .add retourne le parametre ajouté, donc on peut faire .value directement

  3. #3
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci sperot pour ta réponse mais ca ne change vraiment pas le fait d'ajouter un espace ou pas, déjà, j'ai une requête qui fonctionne bien même si le where est collé à ce qui est avant, sinon j'ai mis un espace là où tu a indiqué mais ca ne marche tjrs pas et j'ai la même erreur .

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    que vaut le commandtext avant le executenonquery ?
    et tu as essayé avec les sql parameters ?

  5. #5
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Non je n'ai pas encore testé avec les paramètres, mais je suppose que ca doit fonctionner, ca me dit quelque chose dans l'une des parties du code.

    Je n'ai pas mis de commande text, tu parle de StoredProcedure, Text et direct?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    non

    dans le new tu passe le str qui va dans commandtext

    m'enfin le contenu de str ca donne quoi ?

    tes champs que tu modifies c'est des nombres ou t'as oublié les ' autour ?


    sinon je suis pas sur que ca vaut le coup de perdre du temps à savoir pourquoi ca ne marche pas avec une technique non sure, si avec la technique sure ca fonctionne
    (sans les parameters, c'est pas très propre et ca plante beaucoup plus souvent du à plein de petites choses)

  7. #7
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci sperot, ca fonctionne avec les paramètres.

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

Discussions similaires

  1. [SQL SERVER 2000] UPDATE avec jointure
    Par Jsh dans le forum Développement
    Réponses: 2
    Dernier message: 23/01/2009, 10h08
  2. [VB.NET/SQL SERVER] Problème traitement de code.
    Par tssi555 dans le forum VB.NET
    Réponses: 3
    Dernier message: 07/10/2008, 23h15
  3. Réponses: 2
    Dernier message: 25/09/2008, 10h15
  4. Réponses: 2
    Dernier message: 23/09/2008, 14h16
  5. [SQL Server 2000]Update avec case
    Par nox75 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/10/2007, 20h18

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