Entwickler-Ecke
C# - Die Sprache - Alternative zu "try/catch"
Doug123 - Di 22.01.08 13:11
Titel: Alternative zu "try/catch"
Hallo!
Ich habe da mal eine Verständnisfrage: Dieser Part soll ja die unübersichtliche "try/catch" - Anweisung ersetzen und die Verbindung nachher automatisch schließen können.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| using (SqlConnection cn = new SqlConnection(sConnString)) { using (SqlCommand cmd = new SqlCommand(sSql, cn)) { cn.Open(); } } |
Wie kann man denn jetzt eine Fehlermeldung ausgeben, falls mal etwas schief gehen sollte, da ich ja vorher im "catch"-Block per "ex.Message" eine Fehlermeldung ausgegeben habe?
Vielen Dank schonmal!
Gruß
Doug
JüTho - Di 22.01.08 13:26
Hallo,
die using-Blöcke sorgen dafür, dass die Verbindung automatisch geschlossen wird und dem GC zum Aufräumen übergeben wird, sodass Du Dich weder um Close noch um Dispose kümmern musst. Es ist also ein Ersatz für try-finally. Das try-catch bleibt weiterhin sinnvoll bzw. notwendig.
Gruß Jürgen
Doug123 - Di 22.01.08 14:04
Achso, dann hatte ich das etwas falsch verstanden!
Danke für deine Antwort! :D
Gruß
Doug
Doug123 - Do 24.01.08 09:47
Hallo!
Ich hätte da doch nochmal eine Frage:
Wie sieht es eigentlich aus, wenn ich bei einem Klick mehrere Datensätze in verschiedenen Tabellen löschen muss? Ich habe eine Haupttabelle und zwei Untertabellen. Lösche ich nun einen Datensatz aus der Haupttabelle , sollen natürlich auch die Datensätze in den beiden Untertabellen, die mit dem Hauptdatensatz in Verbindungs stehen gelöscht werden.
Muss ich dann beim Löschen aus der Haupttabelle und aus den zwei Untertabellen jeweils immer das hier aufrufen, sprich dann dreimal?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| using (SqlConnection cn = new SqlConnection(sConnString)) { using (SqlCommand cmd = new SqlCommand(sSql, cn)) { cn.Open(); } } |
Gruß
Doug
UGrohne - Do 24.01.08 11:01
Das Beste ist, wenn Du das in Deiner Datenbank umsetzt und zwar mit einem Foreign Key Constraint mit einem Cascade Delete. Ein Foreign Key Constraint gibt an, welches Feld in Deiner Detailtabelle auf welches Feld in der Haupttabelle verweist, wird also in den Detailtabellen erstellt. Für bestimmte Operationen kannst Du dann Mechanismen implementieren, eben bspws. ein "OnDelete Cascade". Das bedeutet dann, dass wenn in der Haupttabelle ein Datensatz gelöscht wird, werden in der Detailtabelle automatisch alle zugehörigen Datensätze auch gelöscht, Du brauchst dann nichts mehr manuell machen.
Diese Dinge setzt aber jede Datenbank ein wenig anders um, da musst Du entweder sagen, welches DBMS oder selbst danach googlen ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!