Enregistrement dans la base de données avec un DataSet [Résolu]

Signaler
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008
-
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008
-
Bonjour!

Je suis un novice en C#. J'éprouve quelques difficulté à sauvegarder
les changements amenés dans mon DataSet dans ma base de données. Une
erreur apparait lorsque j'invoque mon service web.



Ce que je désire, c'est modifié une cellule de mon DataSet et ensuite
faire un Update pour enregister mes données dans ma base de données.



Voici le code:




MyDataAdapter = new MySqlDataAdapter("Select * FROM test_viz", MyConnexion);

DataSet MyDataSet = new DataSet();

MyDataAdapter.Fill(MyDataSet, "test_viz");



string NewValue = "Marcello";

DataRow MyRow = MyDataSet.Tables["test_viz"].Rows[0];



MyRow["prenom"] = NewValue;

MyDataSet.Tables["test_viz"].Rows.InsertAt(MyRow, 2);



MyDataAdapter.Update(MyDataSet);

12 réponses

Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

J'ai trouvé la solution à mon problème!



Voici le code avec quelques commentaires :



[WebMethod]

public string testValeur()

{



//On donne les paramètres de connections pour la base de données

string MyConnexionString =
String.Format("server=localhost;user id=root; password=Diplome05;



database=test; pooling=false");



MyConnexion = new MySqlConnection(MyConnexionString);

MyConnexion.Open();



//On donne la requête SQL pour obtenir les informations qui seront insérer par la suite dans le DataSet

MyDataAdapter = new MySqlDataAdapter("Select * FROM test_viz", MyConnexion);



DataSet MyDataSet = new DataSet();



/*
Avant d'envoyer la mise à jour à la base de données, il faut configurer les objets InsertCommand , UpdateCommand et DeleteCommand pour ajuster les modifications avec la base de données. Il est possible d'utiliser l'objet SqlCommandBuilder pour les générer automatiquement : */



MySqlCommandBuilder
myDataRowsCommandBuilder = new MySqlCommandBuilder(MyDataAdapter);



//On remplie notre DataSet avec les données

MyDataAdapter.Fill(MyDataSet, "test_viz");



//Modification d'une cellules dans le DataSet

MyDataSet.Tables["test_viz"].Rows[1]["prenom"] = "Thibaud";



//On charge notre DataSet modifié dans la base de données

MyDataAdapter.Update(MyDataSet, "test_viz");



MyConnexion.Close();



return "Test est passe";



}



Merci encore à tous ceux qui m'on aider!
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
6
Pour te servir de la methode Update d'un dataadapter il te faut definir la SqlCommand d'insert et d'update (Voir les propriétés qui de tête doivent ressemblées a UpdateCommand et InsertCommand )

A++

CrazyHT
MVP Visual C#.NET
Messages postés
18
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
3 mars 2009

Salut leviz,



un chtit aperçu de ton erreur non ?
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

Je comprends un peu mieux comment faire! J'essais et je vous redonnerais de mes nouvelles. A+
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

Je n'y arrive toujours pas! Il y a encore des erreurs.

Si quelqu'un peut me dire ou je fais l'erreur : (Pour rappel: je
possède une table dans une base de données MySql qui se nomme
"test_viz" et cette table se compose de trois champ "id", "nom" et
"prenom"). Il y a déjà des donnée préenregistrer mais je désire
modifier l'une des données de ma base de données: c'est le champs
"prenom" de l'id 2 que j'aimerais pouvoir remplacer par un autre
prénom.)



Voici mon code :





string MyConnexionString =
String.Format("server=localhost;user id=root; password=Diplome05;
database=test;











pooling=false");



MyConnexion = new MySqlConnection(MyConnexionString);

MyConnexion.Open();



MyDataAdapter = new MySqlDataAdapter("Select * FROM test_viz", MyConnexion);



MyDataAdapter.TableMappings.Add("test_viz","test");




MyDataAdapter.UpdateCommand new MySqlCommand("UPDATE test_viz SET nom
@nom, prenom =


@prenom, WHERE id = @id ",
MyConnexion);


MyDataAdapter.UpdateCommand.Parameters.Add("@prenom",MySqlDbType.String,
45, "prenom");

MyDataAdapter.UpdateCommand.Parameters.Add("@nom", MySqlDbType.String, 45, "nom");

MyDataAdapter.UpdateCommand.Parameters.Add("@id",MySqlDbType.Int32,4, "id");



DataSet MyDataSet = new DataSet();



MyDataAdapter.Update(MyDataSet, "test_viz");



//On récupère les données du DataSet

MyDataAdapter.Update(MyDataSet, "test_viz");



MyDataSet.AcceptChanges();

MyDataSet.Clear();

MyDataAdapter.Fill(MyDataSet, "test_viz");




string coo1 =
MyDataSet.Tables["test_viz"].Rows[1].ItemArray[2].ToString();



MyConnexion.Close();
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

J'ai pas vu deux erreurs un peux stupide mais ca ne
marche toujours pas dans le code précédent! que j'ai corrigé dans le
code suivant.





Nouveau code:



string MyConnexionString =
String.Format("server=localhost;user id=root; password=Diplome05;
database=test; pooling=false");



MyConnexion = new MySqlConnection(MyConnexionString);

MyConnexion.Open();



MyDataAdapter = new MySqlDataAdapter("Select * FROM test_viz", MyConnexion);



MyDataAdapter.TableMappings.Add("test_viz","test");



MyDataAdapter.UpdateCommand
new MySqlCommand("UPDATE test_viz SET nom @nom, prenom = @prenom,
WHERE id






= @id ",
MyConnexion);


MyDataAdapter.UpdateCommand.Parameters.Add("@prenom",MySqlDbType.String,
45, "prenom");

MyDataAdapter.UpdateCommand.Parameters.Add("@nom", MySqlDbType.String, 45, "nom");

MyDataAdapter.UpdateCommand.Parameters.Add("@id",MySqlDbType.Int32,4, "id");



DataSet MyDataSet = new DataSet();



MyDataAdapter.Update(MyDataSet, "test_viz");



MyDataSet.AcceptChanges();

MyDataSet.Clear();

MyDataAdapter.Fill(MyDataSet, "test_viz");



//On récupère les données du DataSet


string coo1 =
MyDataSet.Tables["test_viz"].Rows[1].ItemArray[2].ToString();



MyConnexion.Close();
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
6
Et tu as une exception ou ca fait juste rien ?

Y a t il des nouvelles lignes ou tu ne fait que modifier l'existant ?

A++

CrazyHT
MVP Visual C#.NET

<
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

J'ai juste supprimer deux lignes par rapport au code précédent.
Lorsque je compile et que j'invoque mon service web, j'ai une exception!
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Je pense qu'il est important de dire laquelle et de donner les informations qui l'accompagne :-)

/*
coq
MVP Visual C#
*/
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
6
De plus si tu efface des lignes il faut renseigné la propriete DeleteCommand

A++

CrazyHT
MVP Visual C#.NET

<
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

En invoquant le dernier service web que j'ai envoyé, j'ai le message d'erreur suivant :



System.NullReferenceException: Object reference not set to an instance of an object.
Messages postés
68
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
10 juin 2008

Je vais poser ma question autrement :

je reçois un DataSet en paramètre et dans ce
DataSet, j'ai une table contenant des données. J'aimerais par exemple
modifier la colonne 3 de la ligne 2 de ce DataSet. Finallement,
j'aimerais faire une mise à jour de ma base de données par rapport au
modification apporté a mon DataSet.



Es-ce que quelqu'un a une solution à me proposer?