Problème lors insertion ligne avec ADO.NET

Résolu
cs_Cryborg Messages postés 30 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 8 février 2007 - 24 sept. 2004 à 11:55
cs_Cryborg Messages postés 30 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 8 février 2007 - 27 sept. 2004 à 09:25
Bonjour,

Je tente désespérément d'insérer une ligne dans un fichier Access en utilisant ADO.NET, mais je n'arrive à rien... Aucun message d'erreur, et pourtant, rien ne s'écrit... J'arrive parfaitement à lire les infos, mais écrire reste problèmatique.... Voici le code que j'utilise :

    Public Function ConnectDBNoms()

        strConnNoms = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & AppStart & "\Listing.mdb;"

        objConnectionNoms = New OleDbConnection
        objConnectionNoms.ConnectionString = strConnNoms
        objConnectionNoms.Open()

        strSqlNoms = "SELECT * FROM Personnes ORDER BY Nom ASC"

        objCommandNoms = New OleDbCommand(strSqlNoms)
        objDataAdapterNoms = New OleDbDataAdapter(objCommandNoms)

        objCommandNoms.Connection() = objConnectionNoms
        objDataSetNoms.Clear()
        objDataAdapterNoms.Fill(objDataSetNoms, "Personnes")
        objDataTableNoms = objDataSetNoms.Tables("Personnes")

    End Function

    Private Sub MenuItem8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem8.Click
        Dim NewLigne As DataRow = objDataSetNoms.Tables("Personnes").NewRow()

        objDataAdapterNoms.InsertCommand = New OleDbCommand
        objDataAdapterNoms.InsertCommand.Connection = objConnectionNoms
        objDataAdapterNoms.InsertCommand.CommandText = "INSERT INTO Personnes(Genre, Nom, Prenom, IDAdresse) VALUES (?,?,?,?)"

        NewLigne("Genre") = 0
        NewLigne("Prenom") = "NPrénom"
        NewLigne("Nom") = "NNom"
        NewLigne("IDAdresse") = CInt(ListView1.SelectedItems.Item(0).Text)
        objDataSetNoms.Tables("Personnes").Rows.Add(NewLigne)

        Try
            objDataAdapterNoms.Update(objDataSetNoms, "Personnes")
            MsgBox("Insertion réussie !")
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
        objConnectionNoms.Close()

    End Sub


Quelqu'un aurait une idée ?

3 réponses

cs_Cryborg Messages postés 30 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 8 février 2007
27 sept. 2004 à 09:25
Je viens de réussir à faire marcher ce bout de code ! L'erreur venait du fait qu'il y avait un champ en NuméroAuto, et le fait de ne pas l'indiquer dans la commande INSERT a éliminé le problème !
3
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
24 sept. 2004 à 12:56
Salut,

Je pense que ton erreur viens de ce bloc :

============================================
Dim NewLigne As DataRow = objDataSetNoms.Tables("Personnes").NewRow()

objDataAdapterNoms.InsertCommand = New OleDbCommand
objDataAdapterNoms.InsertCommand.Connection = objConnectionNoms
objDataAdapterNoms.InsertCommand.CommandText = "INSERT INTO Personnes(Genre, Nom, Prenom, IDAdresse) VALUES (?,?,?,?)"

NewLigne("Genre") = 0
NewLigne("Prenom") = "NPrénom"
NewLigne("Nom") = "NNom"
NewLigne("IDAdresse") = CInt(ListView1.SelectedItems.Item(0).Text)
objDataSetNoms.Tables("Personnes").Rows.Add(NewLigne)

objDataAdapterNoms.Update(objDataSetNoms, "Personnes")
============================================

Utilise plutôt la fonction "Recordset" avec "addnew", pour cela tu doit impliquer la référence : ADODB

N'hésite pas à demander un exemple de code.

Voir MSDN
Chris....
0
cs_Cryborg Messages postés 30 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 8 février 2007
24 sept. 2004 à 13:39
Merci pour ta réponse cboulas,

J'ai déjà utilisé ADODB, et effectivement c'est beaucoup plus simple d'utilisation... Mais je voulais absolument essayer les fameux DataSets dont je n'entends que du bien, et qui pourtant ne sont pas une sinécure niveau utilisation...

Si jamais je n'y arrive pas, je reviendrais à ces bons vieux recordsets, mais je voudrais tout de même comprendre pour quoi ce bout de code, qui vient pourtant de MSDN en grande partie, et où je n'ai changé que les noms des objets....

L'erreur vient effectivement de ce bout de code que tu as mis en évidence, mais comme il me sort "Insertion réussie !", je n'arrive pas à voir où ça cloche... Surtout que même avec un pas-à-pas, tout a l'air correct et se remplit bien... On dirait tout simplement que les changements du DataSet ne sont pas retransmis au DataAdapter...
0
Rejoignez-nous