Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Fehlerbehandlung: Sicherstellen, dass zwei Aktionen ganz oder gar nicht ausgeführt werden
V4yd
myCSharp.de - Member



Dabei seit:
Beiträge: 19
Herkunft: Hessen

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

beantworten | zitieren | melden

Hallo V4yd,
Zitat von 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
private Nachricht | Beiträge des Benutzers
V4yd
myCSharp.de - Member



Dabei seit:
Beiträge: 19
Herkunft: Hessen

Themenstarter:

beantworten | zitieren | melden

Danke für eure superschnellen Antworten. Haben mir sehr geholfen. Danke
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers