Autor Beitrag
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: 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):

ausblenden volle Höhe C#-Quelltext
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           //Ableiten kein Problem...
    {
        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)
            {
                /*...Muss ich hier etwas zurückgeben? Dann hab ich ja 2x eine Try-Catch-Abfrage...*/
            }
            return 0;
        }
    }
}

_________________
Thomas Müller
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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).

user profile iconLocalDeeJay hat folgendes geschrieben:
Wenn ich dich mal seh geb ich dir einen aus ;)
:beer:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 15.11.07 23:18 
user profile iconLocalDeeJay 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:
ausblenden C#-Quelltext
1:
throw;					

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):
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows XP, Windows Vista Ultimate
C/C++ (VS6.0, VS 2005), C# (VS 2005) , PHP (Adobe Dreamweaver CS3, Apache)
BeitragVerfasst: 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