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 :

impossible d'inserer des données dans un champ du type date sous sql server


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 37
    Points
    37
    Par défaut impossible d'inserer des données dans un champ du type date sous sql server
    Salut,

    Je voudrais à partir de mon textbox insérer un enregistrement dans un champ (Date_presence) du type datetime de ma base des données sql server 2000 mais j'ai un bug que je n'arrive pas à comprendre. quelqu'un peut bien m'aider à résoudre ce promlème. voici mon code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      Sub ajout_mvtcontat()
            ' Try
     
     Dim rqt As String = "insert into mvt_presence (Code_badjet,Date_presence,Heure_arrive) values ('" & TextBox1.Text & "',# " & txtDate.Text & " #,'" & heure_arrive.Text & "') "
     
            cd = con.CreateCommand()
            cd.CommandText = rqt
            cd.ExecuteNonQuery()
     
        End Sub
    et j'ai ceci comme message d'erreur:

    Line 1: Incorrect syntax near '26'.
    J'utilise VB.NET 2008

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 310
    Points : 347
    Points
    347
    Par défaut
    Salut,

    Je pense que cela vient du format de ta date que tu la récupères. Elle ressemble à quoi ta date dans la textbox ?

  3. #3
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    L'utilisation des requêtes paramétrées devrais résoudre ton problème et je crois que les "#" ne devrais pas figuré dans ta requête.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Fait un console.writeline(rqt) afin de récupérer le texte final de ta requête générée.

    Ensuite en étudiant cette requête tu pourras analyser où est l'erreur de syntaxe qui fait planter cette requête.

    Autrement pour éviter des comportements foireux (parce que txtDate.text ça peut être tout et n'importe quoi...), je te recommande plutôt d'utiliser une variable DateTime puis dans la construction de ta requête un madate.ToString("chaînedeformatage").

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date.ToString("#MM\/dd\/yyyy#")
    Bien entendu il te faudra alors soit utiliser un contrôle exposant une propriété de type datetime (genre le calendrier) ou alors faire une routine convertissant un texte box vers ta variable date à la saisie (ce qui te permet de remonter une erreur de saisie à l'utilisateur plus rapidement).

    P.S. Le fait d'utiliser d'un ExecuteNonQuery() pour ajouter un enregistrement ce n'est de loin pas la chose la plus propre à faire en .NET (de la à dire que ça sent bon le VBA et DAO il n'y a qu'un pas que je ne ferais pas.)

    P.S2 Il faut aussi utiliser un .replace("'","''") pour tes valeurs strings sous peine d'une grosse faille de SQL injection

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 310
    Points : 347
    Points
    347
    Par défaut
    Citation Envoyé par sinople Voir le message
    P.S. Le fait d'utiliser d'un ExecuteNonQuery() pour ajouter un enregistrement ce n'est de loin pas la chose la plus propre à faire en .NET (de la à dire que ça sent bon le VBA et DAO il n'y a qu'un pas que je ne ferais pas.)
    Peux-tu m'expliquer pour quelles raisons un ExecuteNonQuery n'est pas conseillé ? Je suis étonné par cette remarque, un INSERT, DELETE ou UPDATE ne renvoie rien, donc faire un ExecuteReader n'est pas utile, non ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Je n'ai pas dit que c'est bon conseiller. Ca fonctionne même très bien (la preuve) surtout quand c'est codé par un doigt cassé qui ne sait pas protéger ses requêtes contre l'injection sql, ni meme écrire des requêtes tout courts... (Bon stop ironnie ok...)

    L'utilisation de cette technique démontre juste une très grosse méconnaissance de ADO.NET...

    Personnellement j'utiliserais la fonction insert de l'objet TableAdapter ou alors un addrow sur une datable, suivi d'un TableAdapter.Update().

  7. #7
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par sinople Voir le message
    P.S2 Il faut aussi utiliser un .replace("'","''") pour tes valeurs strings sous peine d'une grosse faille de SQL injection
    L'idée serais d'utiliser tout simplement des requêtes paramétrés au lieu de modifier la valeur d'un champ qui est passé en paramétré et faire des replace sur chaque champs de type string n'est pas propre du tout.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

Discussions similaires

  1. Réponses: 14
    Dernier message: 12/04/2007, 17h46
  2. Réponses: 3
    Dernier message: 27/09/2006, 19h50
  3. Comment inserer des données dans la base?
    Par Kurabong dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/07/2006, 09h31
  4. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11

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