2009-03-09 20 views
0

Ich habe (eine andere) Frage über das Schreiben von OleDbCommand's. Ich habe einen komplexen Auswahlbefehl (enthält mehrere linke Joins) und OleDbCommandBuilder kann keine Aktualisierungsbefehle für mich generieren.Benutzerdefinierte Schreiben OleDbCommand Befehle

Ich kann nicht scheinen, die Magie hinter dem Schreiben von Update-Befehlen zu begreifen. Ich kenne die Struktur der SQL-Update-Anweisung, aber ich bin etwas verwirrt darüber, wie dies mit OleDbDataAdapter funktioniert. Ich weiß, dass, wenn ich adapter.Update() aufrufe, es nur die notwendigen Reihen von DataTable auffrischen wird, jedoch weiß ich nicht, wie man einen Aktualisierungsbefehl schreibt, also kann er wissen, welches Feld in welche Tabelle benötigt, die aktualisiert werden muss.

Ich würde mich sehr freuen, wenn mir jemand den Prozess erklären und mir in die richtige Richtung zeigen könnte.

bearbeiten: Da niemand zu beantworten ist, werde ich einige weitere Details in Bezug auf meine Frage schreiben:

Ich habe eine select-Anweisung in dieser Form:

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

man mir rätselhaft ist, wie soll ich eine Update-Anweisung zu schreiben, da ich es so nicht schreiben kann:

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

So verstehe ich nicht, wie dies zu tun, da die update-Anweisung nur ein Tabellenargument akzeptiert. Ist es überhaupt möglich, die OleDbDataAdapter.Update-Methode für diese Art von DataTables aufzurufen?

Antwort

1

Versuchen Sie dies zu tun?

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

Ich bin ziemlich sicher, dass Sie nicht mehr als eine Tabelle auf einmal aktualisieren können. Sie müssten also eine Aktualisierungsanweisung für jede der Tabellen ausgeben. Wenn Sie die Anzahl der Roundtrips zum Server zu reduzieren, versucht man die Aussagen mit trennen kann „;“ oder juste eine gespeicherte Prozedur aufrufen, die die n-Updates

Noch INSTEAD OF triggers Besuche tun würde, vielleicht das, was Sie suchen nach

+0

Nun, das ist definitiv hilfreich, aber es gibt immer noch ein Problem. DataRow enthält Spalten aus verschiedenen Tabellen und jede von ihnen könnte geändert werden - und es ist mir immer noch unklar, wie ich einen Update-Befehl schreiben könnte, der eines dieser Felder modifizieren könnte. –

+0

Ich bin mir ziemlich sicher, dass Sie eine Update-Anweisung für jede der Tabelle dann ausgeben müssen ... –

+0

Check-out INSTEAD von Triggern, dass vielleicht, was Sie suchen –

Verwandte Themen