Comparer deux jeux de données en C #

J’ai deux ensembles de données et j’ai besoin de comparer ces deux ensembles de données de telle sorte que si ID n’existe pas dans une table, j’ai besoin d’écrire insérer requête Query else mise à jour requête.

Pour Ex:

Id in One dataset ID in second Dataset 1 1 2 2 3 4 

Je dois insérer l’ID 3 dans le deuxième jeu de données.

Voici mon code pour votre référence:

 if (ds.Tables[0].Rows.Count > 0 || clientDS.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { for (int j = 0; j < clientDS.Tables[0].Rows.Count; j++) { if (ds.Tables[0].Rows[i]["Id"].ToString() == clientDS.Tables[0].Rows[j]["Id"].ToString()) { client.GetSingleValue("update customers set Name='" + ds.Tables[0].Rows[i]["Name"].ToString() + "',ContactPerson= '" + ds.Tables[0].Rows[i]["ContactPerson"].ToString() + "',Address='" + ds.Tables[0].Rows[i]["Address"].ToString() + "',TinNo='" + ds.Tables[0].Rows[i]["TinNo"].ToString() + "',ContactNo='" + ds.Tables[0].Rows[i]["Contactno"].ToString() + "',Report= '" + ds.Tables[0].Rows[i]["Report"].ToString() + "',Sync=0,Ids='" + ds.Tables[0].Rows[i]["Id"].ToString() + "' where id='" + ds.Tables[0].Rows[i]["Id"].ToString() + "' "); } else { client.GetSingleValue("insert into customers(id,Name,ContactPerson,Address,TinNo,ContactNo,Report,Sync,Ids) values('" + ds.Tables[0].Rows[i]["Id"].ToString() + "', '" + ds.Tables[0].Rows[i]["Name"].ToString() + "','" + ds.Tables[0].Rows[i]["ContactPerson"].ToString() + "', '" + ds.Tables[0].Rows[i]["Address"].ToString() + "', '" + ds.Tables[0].Rows[i]["TinNo"].ToString() + "', '" + ds.Tables[0].Rows[i]["Contactno"].ToString() + "', '" + ds.Tables[0].Rows[i]["Report"].ToString() + "',0,'" + ds.Tables[0].Rows[i]["Id"].ToString() + "')"); } } } } 

Le code ci-dessus ne fonctionne pas. Pls rectifier mon problème.

Merci

Je pense que votre erreur compaing la chaîne Id en utilisant == . Essayez d’utiliser Equals . Je voudrais juste utiliser un foreach et sélectionner à la place:

 foreach (DataRow row in ds.Tables[0].Rows) { ssortingng filter = ssortingng.Format("Id = '{0}'", row["Id"]); DataRow[] rows = clientDS.Tables[0].Select(filter); if (rows.length == 0) { // insert here } else { // update here } } 

Utilisez la méthode Merge:

 Dataset2.Merge(Dataset1); 

Cela va insérer dans Dataset2 tous les enregistrements qui sont dans Dataset1 mais pas déjà dans Dataset2. Remarque: votre question d’origine suggère que vous deviez insérer des enregistrements ou mettre à jour les enregistrements correspondants de Dataset1, mais vos commentaires semblent suggérer que vous n’avez pas réellement besoin de faire de mise à jour. La méthode Merge insérera uniquement les nouveaux enregistrements de Dataset1.

 DataSet data1 DataSet data2 data1.Merge(data2,true) 

fusionnera data2 dans data1 pas écraser les lignes avec la même clé primaire et append des lignes avec une clé primaire non existante dans data1 .

 data1.Merge(data2,false) 

fusionnera data2 dans data1 écrasant toutes les lignes et en appenda de nouvelles

Ajoutez ces deux tables (instances DataTable) dans un DataSet et ajoutez une relation.

DataSet ds = new DataSet (); ds.EnforceConstraints = false;

 DataTable dt1 = new DataTable("A"); DataTable dt2 = new DataTable("B"); dt1.Columns.Add("ID", typeof(int)); dt1.PrimaryKey = new DataColumn[] {dt1.Columns[0]}; dt1.Rows.Add(1); dt1.Rows.Add(2); dt1.Rows.Add(3); dt2.Columns.Add("ID", typeof(int)); dt2.Rows.Add(1); dt2.Rows.Add(2); dt2.Rows.Add(4); ds.Tables.Add(dt1); ds.Tables.Add(dt2); ds.Relations.Add("ID_REL", dt1.Columns[0], dt2.Columns[0]); foreach (DataRow r in ds.Tables["A"].Rows) { DataRow []child=r.GetChildRows("ID_REL"); Console.Write(r[0] + " " ); if (child.Length != 0) Console.WriteLine(child[0][0]); Console.WriteLine(); }