Autor Beitrag
Doug123
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 22.01.08 13:11 
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.

ausblenden 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();
         // usw.
                
     }
}


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 22.01.08 14:04 
Achso, dann hatte ich das etwas falsch verstanden!

Danke für deine Antwort! :D

Gruß
Doug
Doug123 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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?

ausblenden 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();
         // usw.
                
     }
}


Gruß
Doug
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 ;)