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 :

Probleme de requete SQL


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 110
    Par défaut Probleme de requete SQL
    bonjours,

    je débute en VB.net et surtout en SQL donc soyez un peu indulgeant.Je suis sous visual studio 2010.

    Voici mon problème :

    Lorsque je souhaite ajouter un enregistrement dans une de mes tables la ligne ou j'effectue ma requête m'indique une erreur lors de l'execution, cette erreur est :
    La conversion de la chaine : "INSERT INTO recette(nom,difficu" en type 'double' n'est pas valide
    j'ai essayer de modifier la requête mais rien n'y fait.

    je vous met le code que j ai pour cette partie :

    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
     
     Dim cmd As SqlCommand
            Dim cnx As SqlConnection
            Dim nomAdmin As Integer
     
            cmd = New SqlCommand()
            cnx = New SqlConnection()
     
            cnx.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=D:\3I\VB\gestionRecette2\WindowsApplication1\WindowsApplication1\Database1.mdf;Integrated Security=True;User Instance=True"
            cmd.Connection = cnx
     
            'ouverture bdd
            If (cnx.State = ConnectionState.Closed) Then
                cnx.Open()
            End If
            cmd.CommandText = "SELECT idAdmin FROM Administrateur"
            nomAdmin = cmd.ExecuteScalar
            MessageBox.Show(nomAdmin)
            cmd.CommandText = "INSERT INTO recette (nom,difficulte,tCuisson,tPrepa,tReposJ,tReposH,tReposM,nombrePersonne,instruction,remarque,idUtilisateur,typePlat) VALUES ('" + TextBox4.Text + "','" + CType(ComboBox1.Text, Integer) + "','" + CType(TextBox1.Text, Integer) + "','" + CType(TextBox2.Text, Integer) + "','" + CType(TextBox5.Text, Integer) + "','" + CType(TextBox6.Text, Integer) + "','" + CType(TextBox7.Text, Integer) + "','" + CType(TextBox3.Text, Integer) + "','" + RichTextBox2.Text + "','" + RichTextBox1.Text + "','" + CType(nomAdmin, Integer) + "','" + ComboBox2.Text + "')"
            cmd.ExecuteScalar()
     
            'fermeture bdd
            If (cnx.State = ConnectionState.Open) Then
                cnx.Close()
            End If
    d'où ma question : que signifie cette erreur et comment y remédier ?
    A préciser : idUtilisateur est une clef étrangère

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Alors dans un premier temps, il faut que tu modifies ton code pour utiliser les requêtes paramétrées, regarde les tutos du site.

    Avec cette modification dis nous si cela modifie ou corrige le problème.

    Ensuite c'est étrange d'avoir un message en rapport avec les double dire que tu ne fais que des cast vers des entiers.

    Je continue les remarques :
    1. Tu fais un ExecuteScalar pour l'INSERT or tu ne récupères rien, utilise plutôt un ExecuteNonQuery
    2. Une remarque plus générale, je ne sais pas comment tu as codé l'exécution de tes requêtes ailleurs mais il serait certainement bon de factoriser le code (je dis ça car je vois le code gérant la connexion, ...)
    3. Concernant le code de fermeture de connexion, si le code avant marche pas de problème mais en cas d'exception je doute que la commande de fermeture de la connexion soit faite.

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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Ok alors quelques conseilles:

    1: Utilise plutot Un Using pour gérer la connexion. C'est une bonne habitude à prendre car ça évite de laisser des connexion ouverte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Using connexion As New SqlConnection(connexionstring)
    connexion.Open
    ... (faire le job sur la base de donnée)
    End Using
    2: Dans la requête, uniquement les chaines de caractère doivent être entouré de guillement simple, pas les chiffres, date... (c'est ce qui provoque ton erreur).

    3: Il faut au minimum gérer les échappement des guillemets simple dans tes string, sinon ton application est sensible à une attaque par injection SQL (ta base de donnée peut être effacée en 30 secondes par un gamin de 12 ans). Soit en utilisant un sur tout ce qui est string dans ta requête, soit en utilisant des requêtes paramétrée. Un début de doc sur le sujet.

    http://msdn.microsoft.com/fr-fr/libr...rs(VS.80).aspx

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 110
    Par défaut
    c'est vrai que c'est bizarre d'autant plus que cette commande fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cmd.CommandText = "INSERT INTO ingredient(nom,prix) VALUES ('" + TextBox1.Text + "','" + TextBox2.Text + "')"
            cmd.ExecuteScalar()
    sinon les requetes et tout ce qui s'ensuivent se declenche quand je clique sur un bouton

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par kazuzu Voir le message
    c'est vrai que c'est bizarre d'autant plus que cette commande fonctionne
    Ca n'a aucune raison de ne pas fonctionner. Mais cela ne change rien aux remarques des collègues supra.

    Accessoirement un tel code est une passoire à injection Sql; remède : utiliser les requêtes paramètrées.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 110
    Par défaut
    j ai trouvé l'erreur il suffisait de remplacer les + par des &.

    sinon pour les requêtes paramétrées je regarderai a sa une fois que j aurai terminé ce que je veux faire car apres avoir jeté un oeil sur les tutos c'est intéressant.

    Sinon, j ai un nouveau problème qui est apparut et qui est :

    L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "FK_recette_utilisateur". Le conflit s'est produit dans la base de données "D:\3I\VB\GESTIONRECETTE2\WINDOWSAPPLICATION1\WINDOWSAPPLICATION1\DATABASE1.MDF", table "dbo.utilisateur", column 'idUtilisateur'.
    L'instruction a été arrêtée.
    cela est-il du au fait que dans la table recette j ai idUtilisateur(clef étrangère) qui recoit l id d'un utilisateur(clef primaire) ou de l admin(clef primaire) ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Vérifie que l'id que tu essaies d'insérer dans comme clef étrangère dans la table est bien clef primaire d'une autre table.

Discussions similaires

  1. Probleme de requete SQL avec la valeur NULL
    Par samyghan dans le forum Installation
    Réponses: 8
    Dernier message: 12/03/2006, 17h24
  2. Probleme de requete SQL
    Par arcane dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 04/10/2005, 11h59
  3. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18
  4. Probleme Session/requete SQL
    Par kolib dans le forum ASP
    Réponses: 4
    Dernier message: 14/06/2005, 16h23
  5. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45

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