Laden...

Fehlerbehandlung: Sicherstellen, dass zwei Aktionen ganz oder gar nicht ausgeführt werden

Erstellt von V4yd vor 14 Jahren Letzter Beitrag vor 14 Jahren 853 Views
V
V4yd Themenstarter:in
19 Beiträge seit 2009
vor 14 Jahren
Fehlerbehandlung: Sicherstellen, dass zwei Aktionen ganz oder gar nicht ausgeführt werden

Hallo und Guten Abend,

Ich brauch mal eure Meinung zu einer Fehlerbehandlung. Hoffe ihr könnt mir helfen.

Also ich habe eine Methode bei der etwas in die Datenbank geschrieben und danach eine Datei in den Programmordner kopiert wird. Beide Aktionen müssen fehlerfrei sein, damit z.B. nichts in der DB steht und die Datei gar nicht existiert.

Wie könnte ich es durch z.B. Catch vermeiden, dass sowas nicht geschieht? Bzw damit man das am besten behandeln kann.


try
{
dbhandler.CreateDocument(new Dokument(xxx,xxx,xxx));
File.Copy(xxx, xxx);
}

Ich danke allen die mir Antworten und Helfen wollen.

Gruß Phil

3.430 Beiträge seit 2007
vor 14 Jahren

Hallo V4yd,

hm, so geht das mit dem Try-Catch wohl nicht, denn wenn du z.B. beim File.Copy einen Fehler bekommst stehen die Daten trotzdem in der Datenbank.

Eine Option wäre dass du beides in ein getrenntes Try-Catch packst und dann so ein Status-Property erstellst. D.h. du setzt es auf true wenn der erste Schritt erfolgreich war und auf false wenn er das nicht war.
Dann kannst du dich am zweiten Schritt versuchen, wenn dieser schief geht musst du den Ersten wieder rückgängig machen.

Gruss
Michael

2.891 Beiträge seit 2004
vor 14 Jahren

Hallo V4yd,

Beide Aktionen müssen fehlerfrei sein,

ein typischer Fall von ACID, also solltest du dir das Thema "Transaktionen" mal angucken.
Eine relativ sichere Variante sollte sein, dass du eine Datenbanktransaktion aufmachst, die Sachen in die DB schreibst, die Datei erstellst und wenn dann alles geklappt hat, die Transaktion commitest. Damit deckst du den Fall ab, dass keine DB-Daten geschrieben wurden, obwohl die Datei nicht existiert.
Wenn die Transaktion dann wider Erwarten (nach dem Erstellen der Datei) nicht commited werden kann, musst du die Datei wieder löschen.
"Relativ sicher", weil sich die beiden Aktionen nicht in jedem Fall ACID ausführen lassen (allerdings sollten das wirkliche Ausnahmefälle sein, bei denen schon irgendetwas richtig kaputt sein muss).

Gruß,
dN!3L

V
V4yd Themenstarter:in
19 Beiträge seit 2009
vor 14 Jahren

Danke für eure superschnellen Antworten. Haben mir sehr geholfen. Danke

1.346 Beiträge seit 2008
vor 14 Jahren

Ab Windows Vista kannst du Transaktionen für Dateioperationen nutzen.(Stichwort Kernel Transaction Manager). Ene erklärung findest du hier Webcast: Windows 7 (Teil 1 von 5) - Windows APIs, die man als Entwickler kennen sollte . Ab ca 57min. Ich würde aber den ganzen Webcast ansehen. Der ist genial.

Gruß pdelvo