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

Windows Forms Discussion :

InsertCommand avec DataAdapter.update


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut InsertCommand avec DataAdapter.update
    Hello!

    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
            Try
                BDDDataSet = New DataSet()
                BDDConnection = New OleDbConnection()
                BDDConnection.ConnectionString = ParametreConnection
                Try
                    BDDConnection.Open()
                Catch
                    MsgBox("Vous devez ouvrir une Base de donnée Access avant toute opération.")
                End Try
                BDDCommand = New OleDbCommand("SELECT USER, MDP FROM Users")
                BDDDataAdapter = New OleDbDataAdapter(BDDCommand)
                BDDCommand.Connection() = BDDConnection
                BDDDataAdapter.Fill(BDDDataSet, "Users")
                BDDConnection.Close()
     
            Catch ex As Exception
                MsgBox("Erreur connection BDD: " & ex.Message)
            End Try
     
            BDDDataRow = BDDDataSet.Tables("Users").NewRow()
            BDDDataRow("USER") = System.Environment.UserName
            BDDDataRow("MDP") = TextBox1.Text
            BDDDataSet.Tables("Users").Rows.Add(BDDDataRow)
     
            BDDDataAdapter.Update(BDDDataSet, "Users")
            BDDConnection.Close()
    Lorsque je rempli la textbox et que j'appuie qur le bouton qui declenche cette fonction, VS 2008 me retourne l'erreur suivante:


    L'exception System.InvalidOperationException n'a pas été gérée
    Message="Update requiert un InsertCommand valide lors du passage de la collection DataRow avec de nouvelles lignes."
    Source="System.Data"
    StackTrace:
    à System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) à System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) à System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) à System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping) à System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) à Apli_Vigneron.Form2.Button1_Click(Object sender, EventArgs e) dans C:\Users\Adrien\Documents\Visual Studio 2008\Projects\Apli_Vigneron\My Project\Form2.vb:ligne 36 à System.Windows.Forms.Control.OnClick(EventArgs e) à System.Windows.Forms.Button.OnClick(EventArgs e) à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) à System.Windows.Forms.Control.WndProc(Message& m) à System.Windows.Forms.ButtonBase.WndProc(Message& m) à System.Windows.Forms.Button.WndProc(Message& m) à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) à System.Windows.Forms.Application.Run(ApplicationContext context) à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) à Apli_Vigneron.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81 à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args) à System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel) à System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext) à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() à System.Threading.ThreadHelper.ThreadStart_Context(Object state) à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) à System.Threading.ThreadHelper.ThreadStart()
    InnerException:

    C'est la première fois que je vois ce type d'erreur et j'ai demandé à plusieurs amis programmeurs, ils ne connaissent pas non plus.

    Merki!

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Apparemment, tu n'as pas mis de OleDbCommandBuilder sur ton OleDbDataAdapter.

    Ca doit expliquer l'erreur.

    Cdt.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    ah oui merci ^^

    Mais maintenant il me dit qu'il y'a une erreur sur la commande insert into.


    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 mdp1 As String
            Dim mdp2 As String
     
            InputBox("Veuillez confirmer que votre login Windows est " & System.Environment.UserName, "Login", System.Environment.UserName)
     
            ConnecDB("SELECT count(*) from users where user like'" & System.Environment.UserName & "'", "table")
     
            If BDDDataSet.Tables("table").Rows(0).Item(0).ToString() = 0 Then
     
                ConnecDB("SELECT USER, MDP FROM USERS", "Users")
     
                mdp1 = InputBox("Veuillez entrer un mot de passe.", "Mot de passe")
                mdp2 = InputBox("Veuillez confirmer votre mot de passe.", "Mot de passe")
                If mdp1 = mdp2 Then
                    BDDDataRow = BDDDataSet.Tables("Users").NewRow()
                    BDDDataRow("USER") = System.Environment.UserName
                    BDDDataRow("MDP") = mdp1
                    BDDDataSet.Tables("Users").Rows.Add(BDDDataRow)
                Else : MsgBox("Les 2 mots de passe entrés ne correspondent pas, veuillez recommencer.", MsgBoxStyle.OkOnly, "Erreur")
                End If
                Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(BDDDataAdapter)
                builder.GetUpdateCommand()
                BDDDataAdapter.Update(BDDDataSet, "Users")
                BDDConnection.Close()
            End If
    L'exception System.Data.OleDb.OleDbException n'a pas été gérée
    ErrorCode=-2147217900
    Message="Erreur de syntaxe dans l'instruction INSERT INTO."
    Source="Microsoft JET Database Engine"
    StackTrace:
    à System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) à System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) à System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) à System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping) à System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) à Apli_Vigneron.User.Button1_Click(Object sender, EventArgs e) dans C:\Users\Adrien\Documents\Visual Studio 2008\Projects\Apli_Vigneron\User.vb:ligne 43 à System.Windows.Forms.Control.OnClick(EventArgs e) à System.Windows.Forms.Button.OnClick(EventArgs e) à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) à System.Windows.Forms.Control.WndProc(Message& m) à System.Windows.Forms.ButtonBase.WndProc(Message& m) à System.Windows.Forms.Button.WndProc(Message& m) à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) à System.Windows.Forms.Application.Run(ApplicationContext context) à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) à Apli_Vigneron.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81 à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args) à System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel) à System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext) à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() à System.Threading.ThreadHelper.ThreadStart_Context(Object state) à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) à System.Threading.ThreadHelper.ThreadStart()
    InnerException:

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    si tu donne pas ta requête , ca va etre dur de te dépanner !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    bah la requête c'est pas moi qui la fait c'est BDDDataAdaptater.update qui s'en occupe...

    sinon j'aurai changer la requête

  6. #6
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    ca me surprendrait que le commandbuilder sache générer des requête action en partant d'un aggrégat

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    je parle de BDDDataAdaptater.update

  8. #8
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Dans le nouveau code, je ne vois pas où tu positionnes la commande de sélection pour BDDDataAdapter.

    C'est normal ?

    Cdt.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    en fait j'ai la fonction connecDB qui fait tout:

    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
    Function ConnecDB(ByVal Requete As String, ByVal Nom_Table As String)
     
            Try
                BDDDataSet = New BDDDataSet()
                BDDConnection = New OleDbConnection()
                BDDConnection.ConnectionString = My.Settings.BDDConnectionString
                Try
                    BDDConnection.Open()
                Catch
                    MsgBox("Vous devez ouvrir une Base de donnée Access avant toute opération.")
                End Try
                BDDCommand = New OleDbCommand(Requete)
                BDDDataAdapter = New OleDbDataAdapter(BDDCommand)
                BDDCommand.Connection() = BDDConnection
                BDDDataAdapter.Fill(BDDDataSet, Nom_Table)
                BDDConnection.Close()
                Return BDDDataSet
     
            Catch ex As Exception
                MsgBox("Erreur connection BDD: " & ex.Message)
            End Try
     
        End Function

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    tu passes bien une requete en paramètre......elle est ou , cette requête ?

    il manque pas avant le fill , un truc du style :

    BDDDataAdapter.selectcommend = BDDCommand ?

    (désolé d'insister.....)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    bah j'sais pas comment le dire autrement:

    BDDDataAdapter = New OleDbDataAdapter(BDDCommand)

    et dans mon 2eme post

    ConnecDB("SELECT count(*) from users where user like'" & System.Environment.UserName & "'", "table")

  12. #12
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Un conseil, commence par mettre des option strict on et option explicit on, car quand je vois ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Function ConnecDB(ByVal Requete As String, ByVal Nom_Table As String)
    (d'où qu'il est le as Dataset ?)

    Je me dis que c'est peut être juste un probléme de portée de variable tout ça car jusque là je n'ai pas vu leur déclaration.

    Cdt.

Discussions similaires

  1. [Débutant] Erreur dataadapter update dataset problem avec access 2007
    Par mafiases dans le forum VB.NET
    Réponses: 5
    Dernier message: 18/07/2015, 15h42
  2. Réponses: 3
    Dernier message: 22/12/2005, 17h47
  3. astuce avec fonction update
    Par cubepiege dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/11/2005, 10h54
  4. requete avec un update
    Par letudiant1 dans le forum ASP
    Réponses: 4
    Dernier message: 06/10/2005, 16h33
  5. Probleme avec l'update
    Par belabyad dans le forum ASP
    Réponses: 8
    Dernier message: 02/05/2005, 10h18

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