[vb.net/sql] insertion de donnée

Résolu
Bonjour,
je veux inserer des données à partir d'un formulaire windows crée en vb (a l'aide des textbox)

voila mon code

Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Common.DbCommand

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New SqlConnection

con.ConnectionString = ("data source=.;initial catalog=Commerce;Integrated Security=SSPI")
con.Open()

(**) Dim cmd As New SqlCommand("insert client values"(Me.TextBox1.Text & ", " & Me.TextBox2.Text & ", " & Me.TextBox3.Text & ", " & Me.TextBox4.Text & ", " & Me.TextBox5.Text), con)

Dim affectedrows As Integer = cmd.ExecuteNonQuery()

con.Close()
End Sub
End Class

kan j'execute, j'ai cette exception au niveau de la ligne (**)

"La conversion de la chaîne ", , , , " en type 'Integer' n'est pas valide"
je ne sais pas vraiment ce que je dois faire dans ce cas
j'espere que vous allez m'aider a trouver l'erreur

merci d'avance
Configuration: Windows XP
Firefox 2.0.0.8

22 réponses

  1. salut polux :-)

    jspr ke ca va :)

    voila j'ai trouvé l'erreur que j'avais au niveau de l'ajout

    l'erreur été au niveau de la requete : ( " & Me.TextBox1.Text & ", " & Me.TextBox2.Text & ", " & Me.TextBox3.Text & ", " & Me.TextBox4.Text & ", " & Me.TextBox5.Text & ")" (syntaxe fausse)

    & Me.TextBox1.Text & ", ' " & Me.TextBox2.Text & " ', ' " & Me.TextBox3.Text & " ', ' " & Me.TextBox4.Text & " ', ' " & Me.TextBox5.Text & " ' ) ", con) (syntaxe correct)

    il fallait mettre les simples cotes pour les valeur varchar
    c evident n'est ce pas :s mais on a pas fait attention
    2
    1. Salut nagnag,

      Tu déclares i = R mais que vaut R ? idem pour s ?

      Pourquoi ne pas faire qu'une boucle ? tu n'as pas besoin de faire do while .... loop

      Ensuite dans ton if il y a toujours le Qr.MovePrevious ...

      Je suppose que i = 1 pour lire la première occurence du recordset. Si la première occurence est 2, tu ajoutes bien i à l'objet Istaud, mais MovePrevious va générer un message d'erreur, puisque tu es sur la première occurence, tu ne peux pas faire "précédente occurence".
      C'est donc un cas particulier qu'il faut traiter de façon indépendante. Même si tu sais que ce n'est pas le cas dans ta table, mais il faut anticiper les éventuels changement pouvant intervenir dans la table (Update, Delete...) qui peuvent changer les données.

      Voilà mes remarques ... mais l'idée est excellente.

      Bravo et bon courage

      ;o)

      Polux

      PS: Merci de me tenir au courant de l'avancement de ton travail ...
      1
      1. Bonjour POLUX31, c'est nagnag

        L'idée est bonne, je peux utiliser :

        i = R

        Do While i < s
        While Not Qr.EOF

        If i <> Qr.Fields(0) Then
        lstaud.AddItem i
        Qr.MovePrevious
        End If

        Qr.MoveNext
        i = i + 1
        Wend

        Loop

        ca marche chez moi mais, je sais pas pour toi, est ce qu'il y a des problèmes à ton avis ?
        1
        1. Bonjour,

          N'oublie pas de mettre résolu sur ton post ...

          @++

          Polux
          1
          1. :) merci a toi aussi

            a+
            1
            1. Salut,

              Oui faute d'inattention mais malheureusement courante ... l'erreur vient aussi de moi, je n'ai pas pu tester :os dans un environnement comme SQL Designer, l'erreur aurait été détectée ...

              Merci de m'avoir tenu informé ...

              Bon courage pour la suite ...

              ;o)

              Polux
              1
              1. ok, merci ... je veux bien connaitre la suite ... je ne t'ai pas beaucoup aider sur ce coup ... je vais me mettre au vb.net pour y voir plus clair.

                Bonne nuit @++

                ;o)

                Polux
                1
                1. j'ai fait ce que tu ma dit
                  mais ya rien de new :s

                  je dois me deconnecté pour l'instant

                  je te remercie bcp bcp bcp pour ton aide polux
                  je vais te tenir au courant de mon application si tu veux ,surtout de cette erreur là ,si je trouve ou ca cloche..

                  merci encore
                  a+
                  1
                  1. Quel est le type de ta clé primaire ?

                    Tu devrais peut-être récupérer les textBox dans des variables que tu convertis en type selon tes champs de ta base.

                    Par exemple, si txtBox1 contient la clé primaire et que celle-ci est de type intéger, fait :

                    Dim sBox1 As Integer = Cint(Me.TextBox1.text)

                    etc ... ensuite tu passes les variables dans ta requete.
                    1
                    1. j'ai 5 champs dans ma table client compris la clé primaire , et qui n'est pas auto-incrémenté
                      1
                      1. je ne peux pas t'aider sur la syntaxe vb.net. Je peux peut-être t'aider en SQL seulement.

                        As-tu bien 5 champs dans ta table client hors le champ de la clé primaire ? Si oui, la table client a-t-elle une clé primaire auto-incrémenté ?
                        0
                        1. Dim cmd As SqlCommand = new SqlCommand(requete,con)
                          ou
                          Dim cmd As new SqlCommand(requete,con)
                          c'est le meme resultat

                          pour affectedrows (c correcte ce que ta dit)mais c juste le nom ke jai donnée a la variable,dailleur je n'ai laisser que

                          cmd.ExecuteNonQuery()

                          mais tjr le meme problem :s :s
                          1
                          1. je ne connais pas vb.net ... mais ne devrais-tu pas faire :

                            Dim cmd As SqlCommand = new SqlCommand(requete,con) ??? et idem pour la connexion ?

                            affectedrows retourne le nombre de lignes affectées ?
                            1
                            1. c bon j'ai corrigé mais :s:s

                              il est passé a la ligne suivante (une autre exception)
                              ( Dim affectedrows As Integer = cmd.ExecuteNonQuery() )
                              et le msg est
                              (Le nom 'rdf' n'est pas autorisé dans ce contexte. Seules sont autorisées ici des constantes, des expressions ou des variables. Les noms de colonnes ne sont pas autorisés.)
                              1
                              1. et maintenant ça coince toujours ???
                                1
                                1. (**) Dim cmd As New SqlCommand("insert client values ( " & Me.TextBox1.Text & ", " & Me.TextBox2.Text & ", " & Me.TextBox3.Text & ", " & Me.TextBox4.Text & ", " & Me.TextBox5.Text & ")", con)

                                  voilà la bonne syntaxe

                                  pour être plus lisible, il est préférable de créer une variable string pour la requete :

                                  Dim requete As String

                                  requete = "insert client values ( " & Me.TextBox1.Text & ", " & Me.TextBox2.Text & ", " & Me.TextBox3.Text & ", " & Me.TextBox4.Text & ", " & Me.TextBox5.Text & ")"

                                  Dim cmd As New SqlCommand(requete,con)
                                  1
                                  1. enlève la première double cote entre values et (
                                    1
                                    • 1
                                    • 2