Refus update sql ( vb.net 2015 vb sql serveur 2016 )

Résolu
Bonjour.
Me revoici avec encore un souci.
J'ai une page où il y a un bouton update qui me donne du fil à retordre.
voici mon code:

Private Sub ModifierToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ModifierToolStripMenuItem.Click
' UPDATE ENTREPRISE
Dim Connexion As New SqlConnection("Data Source=OMNIFAB;Initial Catalog=PERSO;User Id=******;Password=******;")
Try
Connexion.Open()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Dim Comm2 As New SqlCommand("UPDATE entreprise SET nom='" & Label1.Text & "', adresse ='" & Label2.Text & "', cp='" & Label3.Text & "',ville='" & Label4.Text & "',tel='" & Label5.Text & "',fax='" & Label6.Text & "',email='" & Label7.Text & "',site='" & Label8.Text & "',rcs='" & Label9.Text & "',siret='" & Label10.Text & "',ape='" & Label11.Text & "', WHERE id='" & TextBox12.Text & "' ", Connexion)
Comm2.ExecuteNonQuery()
End Sub


J'ai ce message d'erreur

Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
Informations supplémentaires : Syntaxe incorrecte vers 'entreprise'.
Ouvrez les guillemets après la chaîne de caractères ' '.

Cordialement
Jacques

7 réponses

  1. Bonjour.
    J'ai résolu mon problème update en plaçant
    Command.ExecuteNonQuery()
    dans un IF, comme ceci

    If Command.ExecuteNonQuery() Then
                MsgBox("Update OK")
            Else
                MsgBox("Update NON")
            End If
    

    Et maintenant plus de problème.
    Merci à tous et pour tout
    1. Contributeur
      peux-tu alors marquer la discussion comme résolue?
  2. Contributeur
    bonjour, plusieurs suggestions:
    1) utilise les balises de code en précisant "basic" pour du VB
    2) quand tu as un message d'erreur, informe-nous de la ligne de code sur laquelle cela se produit
    3) quand tu prepares ainsi une requête SQL via un programme, fais plutôt ainsi:
    dim reqSQL as string
    reqSQL = "UPDATE entreprise SET nom='" & Label1.Text & "', adresse ='" & Label2.Text & _
        "', cp='" & Label3.Text & "',ville='" & Label4.Text & "',tel='" & Label5.Text & _
        "',fax='" & Label6.Text & "',email='" & Label7.Text & _
        "',site='" & Label8.Text & "',rcs='" & Label9.Text & _
        "',siret='" & Label10.Text & "',ape='" & Label11.Text _
        & "', WHERE id='" & TextBox12.Text & "' "
    Dim Comm2 As New SqlCommand(reqSQL, Connexion)

    4) quand tu as un soucis avec une requête SQL via un programme, récupère la source de la requête, et teste cela en direct sur la base de données. si tu ne comprends pas l'erreur, partage la source de la requête, ainsi que le message d'erreur.
    1. Bonjour yg_be
      J'ai essayé ton code mais j'ai toujours le même message d'erreur.
      Quand à utiliser la balise de code, c'est ce que j'ai fait mais ça ne change rien.

      Dim reqSQL As String
      reqSQL = "UPDATE entreprise SET nom='" & Label1.Text & "', adresse ='" & Label2.Text & _
      "', cp='" & Label3.Text & "',ville='" & Label4.Text & "',tel='" & Label5.Text & _
      "',fax='" & Label6.Text & "',email='" & Label7.Text & _
      "',site='" & Label8.Text & "',rcs='" & Label9.Text & _
      "',siret='" & Label10.Text & "',ape='" & Label11.Text _
      & "', WHERE id='" & TextBox12.Text & "' "
      Dim Comm2 As New SqlCommand(reqSQL, Connexion)
      Comm2.ExecuteNonQuery()



      voici le message que j'obtiens, de la ligne => comm2.ExecuteNonQuery ()

      Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
      Informations supplémentaires : Syntaxe incorrecte vers 'entreprise'.
      Ouvrez les guillemets après la chaîne de caractères ' '.


      J'ai suivi ton conseil et ai fait ma requête directement sur le serveur et il me signale une erreur de syntaxe

      Msg 156, Niveau 15, État 1, Ligne 7
      Syntaxe incorrecte vers le mot clé 'WHERE'.


      J'ai vu que j'avais placé une , avant la clause WHERE mais c'est toujours pareil

      J'ai rectifié en modifiant la valeur de l'ID de INT en VARCHAR, sur le serveur je n'ai plus d'erreur mais toujours le même message au debugage, là je ne comprend plus rien.

      1. Contributeur
        peux-tu nous montrer la source SQL de la requête qui ne fonctionne pas?
    2. Bonjour Jacques,

      par 2 fois dans une précédente question, je t'ai demandé de lire le petit tuto sur les balises de codes. c'était là
      https://forums.commentcamarche.net/forum/affich-36566015-sql-combobox-et-lecture-dans-des-textbox-vb-net-2015-vb#2
      Au vu de tes 2 pavés gris et moches, il me semble que tu n'as pas fait cet effort.

      yg_be lui fait l'effort de te poster un code
      • coloré
      • indenté
      • dont les lignes sont numérotées
      • avec ascenseur horizontal ou vertical si besoin.


      Pourtant, lui n'a pas besoin d'aide, donc n'a pas besoin de donner envie aux autres de lire sa réponse.
      Le moindre respect que tu devrais avoir envers lui, c'est de lui rendre la tache plus aisée non?

      Quand tu aurais fait l'effort de poster un code lisible, je te montrerais comment en VB.Net on construit une string de façon plus "clair", car là on codant en mode VBA, s'il manque une apostrophe c'est pas facile à voir.
      1. Bonjour Whismeril.
        J'ai reçu ton mail au moment ou j'étais en train de relire l'art et la manière de poster du code.
        J'avoue que j'ai du lire un peu trop vite et zapper quelques lignes.
        Je reposte donc mon script.

        Dim reqSQL As String
                reqSQL = "UPDATE entreprise SET nom='" & Label1.Text & "', adresse ='" & Label2.Text &
                    "', cp='" & Label3.Text & "',ville='" & Label4.Text & "',tel='" & Label5.Text &
                    "',fax='" & Label6.Text & "',email='" & Label7.Text &
                    "',site='" & Label8.Text & "',rcs='" & Label9.Text &
                    "',siret='" & Label10.Text & "',ape='" & Label11.Text _
                    & "' WHERE id='" & TextBox12.Text & "' "
                Dim Comm2 As New SqlCommand(reqSQL, Connexion)
                Comm2.ExecuteNonQuery()


        Effectivement, il y a la numérotation des lignes, c'est nettement mieux.
        Mille excuses.
        1. Très bien.

          Il y a deux autres façons de construire une string en .Net.
          La méthode prend en paramètres un texte "modèle", et un tableau d'objets "paramètriques".
          C'est dans le tableau que l'on va chercher les informations à insérer dans le modèle.
          Par définition, le tableau n'a pas un nombre d'item fixe, pour ajouter un objet, il suffit de le mettre à la suite des autres.
          Dans le texte modèle, l'emplacement des informations à insérer est marqué par
          "{x}"
          où x est l'index de l'objet dans le tableau d'objets.

          Par exemple
          Dim prenom as String = "Alain"
          Dim nom as String = "Di"
          Dim identite as String = String.Format("{0} {1}", prenom, nom")
          'identite vaut "Alain Di"
          


          Cette méthode permet aussi d'appliquer des formats sur les nombre, bon là pour ta requête ça ne sert pas puisque tu n'as que des string en entrée, mais ça peut te servir un jour
          Dim pi as String = String.Format("Pi arrondi à 2 décimales '{0:0.00}' ", Math.Pi)
          Dim heure As String = String.Format("Heure:Minute '{0:hh:mm}' {1}", DateTime.Now, If(DateTime.Now.Hour > 12, "de l'après-midi", "du matin"))


          Note que là on voit plus facilement les apostrophes entourant les données issues des variables