OdbcCommandBuilder et MySQL avec VB.net urgent

jd00 Messages postés 2 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 19 janvier 2005 - 18 janv. 2005 à 17:31
jd00 Messages postés 2 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 19 janvier 2005 - 19 janv. 2005 à 09:38
Bonjour,
Je rencontre un probleme sur VB.net
Je voudrais pouvoir effectuer une mise à jour de la base de données par un dataset. Pour cela je recupere la table "utilisateur" de ma base de donnee et je remplis le dataset avec sans probleme. Le probleme est que si je modifie le dataset, par exemple en rajoutant une ligne dedans, et que je fais la mise à jour vers la BD avec le OdbcAdapter(ligne updatecommand), cela plante avec le message:
System.NullReferenceException: Object reference not set to an instance of an object.

On peut noter que le prog ne plante pas si on ajoute pas la nouvelle ligne dans le dataset. Je pense que l'erreur vient du fait que l'odbcCommandBuilder n'arrive pas a generer la requete de mise à jour, mais je n'en suis pas sur.
Merci de me repondre
Voici le code correspondant a ma fonction de test:


Public
Function Test2(
ByVal mySelectQuery
As
String,
ByVal myTableName
As
String)
As DataSet


Conn =
New OdbcConnection("DSN=formasoft;")



Dim myDataAdapter
As
New OdbcDataAdapter


myDataAdapter.SelectCommand =
New OdbcCommand(mySelectQuery, Conn)



Dim cb
As OdbcCommandBuilder =
New OdbcCommandBuilder(myDataAdapter)



Try


Conn.Open()



Dim ds
As
New DataSet


myDataAdapter.Fill(ds, myTableName)


Console.Out.WriteLine(ds.Tables(0).Rows(0).Item(3).ToString)



Dim NewLigne
As DataRow


NewLigne = ds.Tables(0).NewRow


NewLigne(0) = "1"


NewLigne(1) = "2"


NewLigne(2) = "3"


NewLigne(3) = "4"


ds.Tables(0).Rows.Add(NewLigne)



' Code to modify data in DataSet here


myDataAdapter.UpdateCommand = cb.GetUpdateCommand()



' Without the OdbcCommandBuilder this line would fail.


myDataAdapter.Update(ds, "utilisateur")


Console.Out.WriteLine("test ok??")


Conn.Close()



Catch e
As Exception


Console.Out.WriteLine("erreur de lecture: " + e.ToString)



'Environment.Exit(1)



End
Try



End
Function

2 réponses

cs_Creat Messages postés 76 Date d'inscription dimanche 25 juillet 2004 Statut Membre Dernière intervention 20 mars 2006
19 janv. 2005 à 01:30
A premiere vue

myDataAdapter.Fill(ds, myTableName)
myDataAdapter.Update(ds, "utilisateur")

d'après moi il faut que tu mettes soit myTableName ou "Utilisateur" dans les 2 cas
jd00 Messages postés 2 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 19 janvier 2005
19 janv. 2005 à 09:38
merci mais ce n'est pas ca.
Je n'ai pas tres bien ecrit mon code. Je me suis renseigne sur la classe CommandBuilder et apparament elle n'est pas capable de générer des requetes SQL pour les jointures de plusieurs tables. Est ce vrai?
Je souhaiterai quand meme l'utiliser pour prendre en compte des modifications d'un dataset à travers un data grid pour des tables simples (select * from utilisateur).
Rejoignez-nous