Comparer deux ensembles de données en C#
j'ai deux jeux de données et j'ai besoin de comparer ces deux jeux de données de telle sorte que si l'ID n'existe pas dans une table, alors j'ai besoin d'écrire Requête d'insertion d'autre requête de mise à jour.
Ex:
Id in One dataset ID in second Dataset
1 1
2 2
3 4
J'ai besoin d'insérer l'ID 3 à la deuxième série 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() + "')");
}
}
}
}
Code ci-dessus ne fonctionne pas. Pls corriger mon problème.
Grâce
Pouvez-vous décrire comment votre approche est destiné à travailler, fondamentalement écrire les étapes que vous voulez le code? Je peux voir ce qui est faux, mais le seul moyen pour résoudre ce problème est d'écrire le code pour vous, il serait mieux si vous pouvez écrire les étapes, et puis on peut remarquer des bugs lors de ces étapes, ou des bugs dans la mise en œuvre.
Boo pour ne pas utiliser des requêtes paramétrées...
je pense que vous pouvez le faire dans tous les SQL, pas besoin d'utiliser l'application. la couche.
étape 1 : sélectionnez la requête à partir du serveur de la base de données de l'étape 2 : sélectionnez la requête à partir de la base de données client. étape 3: comparaison de ces deux jeux de données. étape 4: Si l'une des lignes manquantes dans la Base de données Clients,puis insérer des lignes de serveur de Base de données client. C'est tout ce que j'ai à faire.
Une question similaire, Comparer ensemble de données ou une meilleure idée + c# 2.0
Boo pour ne pas utiliser des requêtes paramétrées...
je pense que vous pouvez le faire dans tous les SQL, pas besoin d'utiliser l'application. la couche.
étape 1 : sélectionnez la requête à partir du serveur de la base de données de l'étape 2 : sélectionnez la requête à partir de la base de données client. étape 3: comparaison de ces deux jeux de données. étape 4: Si l'une des lignes manquantes dans la Base de données Clients,puis insérer des lignes de serveur de Base de données client. C'est tout ce que j'ai à faire.
Une question similaire, Comparer ensemble de données ou une meilleure idée + c# 2.0
OriginalL'auteur GIRISH GMAIL | 2009-08-11
Vous devez vous connecter pour publier un commentaire.
Je pense que ton erreur est compaing de la chaîne d'Id à l'aide de
==
. Essayez d'utiliserEquals
.Je venais d'utiliser un foreach et sélectionnez à la place:
C'est le C#, pas de Java -
==
fonctionne correctement pour les chaînes de caractères en C#.OriginalL'auteur Noam Gal
Utiliser la méthode de Fusion:
Cela permettra d'insérer dans Dataset2 tous les dossiers qui sont dans Dataset1 mais ce n'est pas déjà Dataset2. Remarque: votre question initiale suggère que vous avez besoin d'insérer des enregistrements ou de mettre à jour les enregistrements correspondants de Dataset1, mais vos commentaires semblent indiquer que vous n'avez pas réellement besoin de faire une mise à jour. La méthode de Fusion uniquement d'insérer de nouveaux enregistrements Dataset1.
Ensembles de données incluent des méthodes pour faire à peu près tout ce que vous devez faire avec table de base de données, mais les programmeurs généralement plutôt écrire leur propre élaborer des hacks pour faire la même chose (cette question fournit d'excellents exemples de ce phénomène).
Devrait les deux ensembles de données ont le même schéma ?
oui.
OriginalL'auteur MusiGenesis
de la fusion
data2
endata1
pas remplacer les lignes avec la même clé primaire et ajouter les lignes avec des non-existence de la clé primaire dans ladata1
.de la fusion
data2
endata1
d'écraser toutes les lignes et ajouter de nouvelles lignesOriginalL'auteur Wyxlwiis
Ajouter ces deux tableaux (les instances DataTable) dans un jeu de données et ajouter des relations.
DataSet ds = new DataSet();
ds.EnforceConstraints = false;
OriginalL'auteur adatapost