Autor |
Beitrag |
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 15.11.07 21:18
Ja, so sieht das doch schon gut aus
Du kannst die transferData-Methode übrigens auch noch static machen, weil Du ja eh keine Felder in Deiner Klasse hast. Dann ersparst Du Dir das instanzieren in der Form.
Was die Exception angeht: Aufgabe der Klassenbibliothek ist es nicht, Meldungen an den Benutzer weiter zu geben, das ist Aufgabe der GUI. An der Stelle würde ich die Bibliothek entweder eine eigene Exception werfen oder die vorhandene Exception gar nicht fangen lassen. Die Exception wird dann von der GUI gefangen und diese zeigt eine Meldung an.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
LocalDeeJay
Beiträge: 34
Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
|
Verfasst: Do 15.11.07 21:49
Ok, danke für den Tipp mit static, so hab ich des noch garnich betrachtet *gg*
des mit der Exception versteh ich glaub net so. Ich denk mir, du meinst dass ich die Funktion bei bestimmten sachen ne exception zurückgeben lass und die exception dann in der form abfragen soll oder?
Aber wie schreib ich ne exception von ner eigenen funktion?!
_________________ Thomas Müller
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 15.11.07 21:52
Du leitest einfach eine eigene Klasse von der Exception-Klasse ab und wirfst die dann.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
LocalDeeJay
Beiträge: 34
Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
|
Verfasst: Do 15.11.07 22:10
Wie leicht du das immer sagst *gg*
Ableiten ist kein Ding, aber wie werf ich eine Exception in einer Funktion aus, wenn ich schon den Rückgabewert als ein Objekt habe (siehe SQLConnection):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| namespace secondDataBaseProject { class DatabaseClass : Exception { private static SqlConnection openDatabaseConnection() { SqlConnection connection = new SqlConnection(); connection.ConnectionString = "Data Source=.\\SQLEXPRESS;" + "AttachDbFilename=C:\\Users\\thomas\\Documents\\DataBase.mdf;" + "Integrated Security=True;" + "Connect Timeout=30;" + "User Instance=True"; try { connection.Open(); } catch (Exception ex) { Console.WriteLine(ex.Message); } return connection; } public static int transferDataToDatabaseClass(string firstName, string lastName) { string strCommand = "INSERT INTO Professor(Vorname, Name) " + "VALUES('" + firstName + "','" + lastName + "')"; SqlCommand command = new SqlCommand(strCommand, openDatabaseConnection());
try { command.ExecuteNonQuery(); } catch (Exception ex) { } return 0; } } } |
_________________ Thomas Müller
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 15.11.07 22:13
Wieso leitest Du Deine Hauptklasse von Exception ab? Du sollst eine neue Klasse von Exception ableiten!
Schau Dir mal die Doku zu throw an.
//edit: Im OpenBook C# gibt's auch was zu Exceptions.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
LocalDeeJay
Beiträge: 34
Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
|
Verfasst: Do 15.11.07 22:29
Hehe,
vielen Dank.
Ist ja echt einfach. Einfach die Exception thrown. Ich frag mich aber was ich hätte ableiten solln. Ich mach einfach throw ex; im catchblock und es funktioniert tadellos.
Wenn ich dich mal seh geb ich dir einen aus
Nochmal thx... =)
_________________ Thomas Müller
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 15.11.07 22:35
Es gibt halt verschiedene Arten von Exceptions, die Exception-Klasse gibt Dir ja keine einfach zu verarbeitende Information, um was für eine Exception es sich handelt (bis auf den String, aber den im Programm auszuwerten ist mühsam).
Wenn Du aber z.B. sowas machst:
C#-Quelltext 1:
| public class KanneIstLeerException : Exception {} |
Und dann in der Methode HoleKaffee diese Exception wirfst, siehst Du schon am Typ, was los ist und kannst in der Anwendung entsprechend reagieren (z.B. die MachNeuenKaffee-Methode aufrufen).
LocalDeeJay hat folgendes geschrieben: | Wenn ich dich mal seh geb ich dir einen aus |
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 15.11.07 23:18
LocalDeeJay hat folgendes geschrieben: | Ich mach einfach throw ex; im catchblock und es funktioniert tadellos. |
Nimmernie! Wenn du eine aufgefangene Exception auf diese Weise wieder wirfst, verlierst du den gesamten bisherigen Callstack. Verwende einfach:
C#-Quelltext
Zumindest in diesem Fall würde ich aber einfach überhaupt keinen try-Block benutzen. Eine DbException sagt ja ziemlich genau aus, was schiefgegangen ist, und muss eigentlich nicht noch durch einen eigenen Exception-Typen garniert werden. Ansonsten leitest du, wie Christian es schon beschrieben hat, eine Klasse von einer Exception-Basisklasse deiner Wahl ab, implementierst diese vier Konstruktoren (wird von FxCop überprüft):
C#-Quelltext 1: 2: 3: 4:
| public Exception(); public Exception(string message); protected Exception(SerializationInfo info, StreamingContext context); public Exception(string message, Exception innerException); | und benutzt den untersten, um die originale Exception als InnerException festzulegen, damit diese nicht verloren geht.
|
|
LocalDeeJay
Beiträge: 34
Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
|
Verfasst: Do 15.11.07 23:36
Hey,
erstmal danke Jungs... Aber über Exceptions weiß ich wohl noch etwas zu wenig. Dachte es wär etwas einfacher mit den Fehlern - aber dem ist wohl nicht so =(
Nunja, ich hab vorhin gesehen das es einige Seiten in dem openbook von galileo sind. Zumahl ich auch noch einige andere Probs mit meinem Projekt habe versuch ich diese Exceptions schnell auf die Reihe zu bekommen. Auch wenns bis jetzt eig funktioniert hat. D.h. als ich mit Absicht einen Fehler gemacht hatte, hab ich auch ne passende Fehlermeldung erhalten.
_________________ Thomas Müller
|
|