2009-03-09 11 views
0

J'ai une (autre) question sur l'écriture de OleDbCommand. J'ai une commande de sélection complexe (comprend plusieurs jointures à gauche) et OleDbCommandBuilder est incapable de générer des commandes de mise à jour pour moi. Je ne peux pas sembler saisir la magie derrière l'écriture des commandes de mise à jour.Ecriture personnalisée Commandes OleDbCommand

Je connais la structure de l'instruction de mise à jour SQL, mais je suis un peu perplexe sur la façon dont cela fonctionne avec OleDbDataAdapter. Je sais que quand j'appelle adapter.Update() il ne mettra à jour que les lignes nécessaires de DataTable, mais je ne sais pas comment écrire une commande Update afin qu'il sache quel champ dans quelle table doit mettre à jour.

J'apprécierais vraiment que quelqu'un puisse m'expliquer le processus et me diriger dans la bonne direction.

Modifier: Puisque personne ne répond, je posterai quelques détails au sujet de ma question:

J'ai une instruction select sous cette forme:

select field1, field2, fieldn from table1 left join table2 on condition left join table3 on condition where condition1 and condition2 

on me laisse perplexe est comment devrais-je écrire une mise à jour puisque je ne peux pas l'écrire comme ceci:

update table1, table2 set field1 = newvalue where condition1 and condition2 

Donc je ne comprends pas comment faire ça, puisque l'instruction update n'accepte qu'un seul argument de table. Est-il même possible d'appeler la méthode OleDbDataAdapter.Update sur ce type de DataTables?

Répondre

1

Essayez-vous de le faire?

update table1 set table1.field1 = table2.field2 
from table1 left join table2 on condition1 
where condition2 and condition3 

Je suis sûr que vous ne pouvez pas mettre à jour plus d'une table à la fois. Vous devrez donc émettre une instruction de mise à jour pour chacune des tables. Si vous essayez de réduire le nombre de vols aller-retour au serveur, vous pouvez séparer les déclarations « » ou Justė appeler une procédure stockée qui ferait les mises à jour n

vérifier Toujours à INSTEAD OF triggers, que peut-être ce que vous cherchez

+0

Eh bien, c'est certainement utile, mais il y a toujours un problème. DataRow contient des colonnes de différentes tables et n'importe lequel d'entre eux pourrait être modifié - et je ne comprends toujours pas comment je pourrais écrire une commande de mise à jour qui pourrait modifier n'importe lequel de ces champs. –

+0

Je suis tout à fait sûr que vous devez émettre une instruction de mise à jour pour chaque table puis ... –

+0

Découvrez les déclencheurs INSTEAD OF, peut-être ce que vous cherchez –