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 :

ExecuteNonQuery*: la propriété Connection n'a pas été initialisée.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Par défaut ExecuteNonQuery*: la propriété Connection n'a pas été initialisée.
    Bonjour, j'appel à votre aide car j'ai un bug dont je ne vois pas pourquoi .
    J'utilise VB2010, access 2010
    J'ai une classe AccessConnexion (qui me permet de me connecter à ma base Access)
    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
     
    Public Class AccessConnexion
        'attribut chemin de la base
        Private chemin As String = My.Application.Info.DirectoryPath & "\base.accdb"
        'Attribut connexion unique à une source de données
        Private cnx As OleDb.OleDbConnection = Nothing
        'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
        Private cnxstr As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & chemin & ";"
    Public Sub Open_connexion()
            Try
                'test si la connexion n'est pas déjà ouverte
                'If cnx.State <> 1 Then
                cnx = New OleDb.OleDbConnection
                cnx.ConnectionString = cnxstr
                cnx.Open()
                'End If
            Catch ex As Exception
                Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
            End Try
        End Sub
    end class
    et une classe AccesUsers (qui permet enfin je voudrais bien qui ajoute un utilisateur à la base)
    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
     
    'ajout référence vers BEL
    Imports BEL
     
    Public Class AccessUsers : Inherits AccessConnexion
     
        'Enregistrement de l'utilisateur dans la base
        Public Sub Ajouter(ByVal NewUser As USER)
            Dim ac As New AccessConnexion
            Dim cmd As New OleDb.OleDbCommand
            ac.Open_connexion()
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "INSERT INTO USERS (LOGIN, MDP, QUESTION, REPONSE) VALUES ('" & NewUser.Login & "','" & NewUser.Password & "','" & NewUser.Question & "','" & NewUser.Reponse & "')"
            'ExecuteNonQuery*: la propriété Connection n'a pas été initialisée.
            cmd.ExecuteNonQuery()
        End Sub
    End Class
    C'est dans cette classe que l'erreur se produit au moment de cmd.ExecuteNonQuery.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Et c'est normal!
    D'un côté tu as une connexion, de l'autre une commande mais rien dans ton code ne les relie entre elles.
    Plutot que d'instancier une nouvelle commande OleDb via un new, il serait préférable de faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cmd = cnx.CreateCommand()

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Par défaut erreur syntaxe instruction INSERT INTO
    j'ai modifié mon code en fonction de ton aide mais maintenant j'ai une autre erreur dans l'écriture de ma requete SQL mais je l'ai testé déjà testé dans un autre programme VB.net mais à l'époque tous était dans une même classe.

    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
     
    'ajout référence vers BEL
    Imports BEL
     
    Public Class AccessUsers : Inherits AccessConnexion
     
        'Enregistrement de l'utilisateur dans la base
        Public Sub Ajouter(ByVal NewUser As USER)
            Dim commande As OleDb.OleDbCommand
            Dim ac As New AccessConnexion
            ac.Open_connexion()
            Dim sql As String = "INSERT INTO USER (LOGIN, PASSWORD, QUESTION, REPONSE) VALUES ('" & NewUser.Login & "','" & NewUser.Password & "','" & NewUser.Question & "','" & NewUser.Reponse & "')"
            commande = ac.get_cnx.CreateCommand()
            commande.CommandText = sql
            commande.ExecuteNonQuery()
        End Sub
    End Class
    Sur la ligne de commande.ExecuteNonQuery() un message s'affiche en me précisant que
    Erreur de syntaxe dans l'instruction INSERT INTO

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    user doit un mot clé réservé
    il faut alors l'entourer de crochet (ou si possible éviter les mots clés comme nom)
    d'un autre côté sur ton premier post la table s'appelle USERS au pluriel, es tu sûr de la syntaxe ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Par défaut Toujours erreur de syntaxe
    Merci du tuyau pour le mot clé j'ai changé le nom dans ma base et dans mon code (évidement) mais une autre erreur persiste.

    Il me marque toujours "l'exception OleDBexception n'as pas été géré" && "erreur de syntaxe dans l'instruction INSERT INTO".

    Pourtant en réalisant un pas à pas détaille dans le informations de commandtext j'ai bien ma requête avec les éléments saisie dans les différents textbox.

    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
     
    'ajout référence vers BEL
    Imports BEL
     
    Public Class AccessUsers : Inherits AccessConnexion
     
        'Enregistrement de l'utilisateur dans la base
        Public Sub Ajouter(ByVal NewUser As USER)
            'Try
            Dim commande As OleDb.OleDbCommand
            Dim ac As New AccessConnexion
            ac.Init_connexion()
            ac.Open_connexion()
            Dim sql As String = "INSERT INTO UTILISATEUR (Login, Password, Question, Reponse) VALUES ('" & NewUser.Login & "','" & NewUser.Password & "','" & NewUser.Question & "','" & NewUser.Reponse & "')"
            commande = ac.get_cnx.CreateCommand()
            commande.CommandText = sql
            commande.ExecuteNonQuery()
            'Catch ex As Exception
            'Throw New Exception("Erreur ajout utilisateur" & Environment.NewLine & ex.Message)
            'End Try
     
        End Sub
    End Class
    et mon bouton Ajouter
    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
    26
     
    'ajout référence vers BEL
    Imports BEL
    'ajout référence vers BEL
    Imports BPL
     
     
    Public Class Inscription
     
        Private Sub AjouterUser(ByVal login As String, ByVal password As String, ByVal question As String, ByVal reponse As String)
            Dim NewUser As USER = New USER(login, password, question, reponse)
            Dim UserBPL As New BPL.BPLuser
            UserBPL.BPL_Ajouter(NewUser)
        End Sub
     
     
        Private Sub Binscription_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Binscription.Click
            'Try
            AjouterUser(TBlogin.Text, TBpassword.Text, CBquestion.Text, TBlogin.Text)
            'Catch ex As Exception
            'MessageBox.Show(ex.Message, ".:: ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Error)
            'End Try
     
        End Sub
     
    End Class

  6. #6
    Invité
    Invité(e)
    Par défaut
    Il est recommandé d'utiliser les requêtes paramétrées pour se prémunir des attaques type injection SQL.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/04/2012, 12h06
  2. Réponses: 2
    Dernier message: 25/05/2010, 20h27
  3. Réponses: 19
    Dernier message: 17/05/2010, 22h54
  4. Réponses: 9
    Dernier message: 07/10/2009, 16h30
  5. Réponses: 12
    Dernier message: 22/08/2009, 18h16

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