Zitat von
opfer.der.genauigkeit:
Dass die Datensätze automatisch mit der Datenbank abgeglichen werden hat laut MS schon etwas mit impliziten Transaktionen zu tun.
Die "implicit transactions" schlagen erst zu, wenn ein entsprechender (
SQL-)Befehl abgesetzt wurde. Die impliziten Transaktionen finden ja auf Serverseite statt.
Per default speichert ein MyDataSet.Post alle Änderungen unmittelbar in der Datenbank. Dein Ansatz ('BeginTransaction') unterbindet das nicht, sondern sagt dem Server nur, das er die Änderungen noch nicht speichern soll. Der Server wird aber mit Befehlen bombardiert, die er sowieso wieder rückgängig machen wird (per Rollback). Schlimmer ist, das -je nach Einstellung des 'Isolation Level'- Tabellen gesperrt werden, sodaß u.U. kein Anderer mehr mit der
DB arbeiten kann, bis Du dein Rollback (oder Commit) ausführst.
Transaktionen dienen eigentlich nur zum Kapseln atomarer Operationen. Klassisches Beispiel wäre eine Anwendung, die eine Banküberweisung tätigt. Dann muss die Belastung des einen Kontos und die Gutschrift des anderen Kontos in einer Transaktion gekapselt werden.
Grundsätzlich sollte man die Transaktionen zu kurz wie möglich offen halten, damit eine echte Mehrbenutzerumgebung gewährleistet ist.
Zum Schluss: Entschuldigung, das ich erst so spät antworte.
Ich werd' mich gleich mal geißeln... Warte ...
So, jetzt gehts mir besser