C# MySQL Login Form Tutorial + Source

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C# MySQL Login Form Tutorial + Source


    MySQL Login Form Tutorial by Retroid



    Einführung

    Hallo und Willkommen zu meinem ersten richtigen Tutorial im Bereich C#. Ich hoffe, dass ich euch mit dem Tutorial euch ein wenig helfen kann, bzw ihr das Tutorial auch versteht, und diese Methode auch in euren privaten Projekten verwenden könnt. Ich werde nun versuchen regelmäßig Tutorial's in Sachen C# zu schreiben, da ich mir auf meiner persönlichen Homepage eine kleine Coding Community aufbauen möchte. Die Tutorial's und Sourceprojekte werdet ihr natürlich auf meiner Seite finden und könnt diese kostenlos downloaden. Doch möchte ich mich vorher bei Holger W. bedanken der mir das ermöglicht während meiner Arbeitszeit dieses Tutorial zu schreiben. Viele wie auch dieses Tutorial werden spontan und ohne Vorbereitung geschrieben.

    Vorbereitung

    [TABLE="width: 800"]
    [TR]
    [TD][/TD]
    [TD]Zuerst startet ihr Visual C# und erstellt eine neue Windows Forms Anwendung. Den Namen könnt ihr euch aussuchen. Ich für meinen fall nehme den Namen "MySQL Login".

    Anschließend fügt ihr eurer Windows Forms Anwendung,
    1 Button und 2 Textboxen hinzu.

    Nun geht ihr in die Codeansicht eurer Form 1. Noch ist wenig Code vorhanden, doch das ändert sich jetzt gleich sehr schnell und wird eventuell etwas unübersichtlich. Deswegen gewöhnt euch immer an, sauber zu Arbeiten, damit ihr euch in eurem eigenen Code zurecht findet![/TD]
    [/TR]
    [/TABLE]
    [TABLE="width: 800, align: right"]
    [TR]
    [TD]Nun solltet ihr bevor ihr anfangt euren Quelltext zu schreiben, die Verweise nochmals überprüfen, denn in unserem Fall müssen wir einen Verweis hinzufügen!

    Dazu gehen wir oben in der Leisten, auf Projekt und auf Verweis hinzufügen und fügen dem Projekt die MYSQL.DATA.dll hinzu.

    Nun haben wir uns fertig auf das Projekt vorbereitet, und können uns nun ganz dem Quelltext widmen.

    Ich wiederhole mich nochmals, dass ihr genau darauf achten sollt, sauber und übersichtlich zu Arbeiten, dass ihr bei größeren Projekten den überblick, oder eure Teamkollegen, sich schneller in eurem Quellcode zurechtfinden.

    Das folgende Projekt, und Quelltext, wird auch unter meiner Seite World of Retroid ← Where awesomeness happens zu finden sein.

    Das Sourceprojekt wird nur auf meiner Seite zu finden sein.

    Falls Probleme oder Fragen auftauchen, werde ich sie gerne hier im Thread u.o auch per PM beantworten.
    [/TD]
    [TD="align: right"][/TD]
    [/TR]
    [/TABLE]

    Tutorial

    Nun kommen wir zum eigentlichen Thema des Tutorials, und zwar dem Quelltext.

    Wir fügen zuerst dem Projekt zwei neuen Namespace hinzu

    Quellcode

    1. using MySql.Data.MySqlClient;
    2. using System.Net.Sockets;


    Als nächtes bauen wir die MySQL verbindung mit eurer Datenbank auf. Dazu benutze ich folgende Funktion.

    Quellcode

    1. [COLOR=#0000ff]public bool[/COLOR] tryLogin([COLOR=#0000ff]string[/COLOR] username, [COLOR=#0000ff]string[/COLOR] password)
    2. {
    3. MySqlConnection con = [COLOR=#0000ff]new[/COLOR] MySqlConnection("[COLOR=#ff0000]host=localhost;user=root;password=;database=forum;[/COLOR]");
    4. MySqlCommand cmd = [COLOR=#0000ff]new[/COLOR] MySqlCommand([COLOR=#ff0000]"SELECT * FROM user WHERE username = '[/COLOR]" + username + "' [COLOR=#ff0000]AND password[/COLOR] = '" + password + "';");
    5. cmd.Connection = con;
    6. con.Open();
    7. MySqlDataReader reader = cmd.ExecuteReader();
    8. [COLOR=#0000ff]if[/COLOR] (reader.Read() != [COLOR=#0000ff]false[/COLOR])
    9. {
    10. [COLOR=#0000ff]if[/COLOR] (reader.IsDBNull(0) == true)
    11. {
    12. cmd.Connection.Close();
    13. reader.Dispose();
    14. cmd.Dispose();
    15. [COLOR=#0000ff]return false[/COLOR];
    16. }
    17. [COLOR=#0000ff]else[/COLOR]
    18. {
    19. cmd.Connection.Close();
    20. reader.Dispose();
    21. cmd.Dispose();
    22. [COLOR=#0000ff] return true[/COLOR];
    23. }
    24. }
    25. [COLOR=#0000ff] else[/COLOR]
    26. {
    27. [COLOR=#0000ff]return false[/COLOR];
    28. }
    29. }
    Alles anzeigen


    Dort könnt ihr wie ihr seht, eure eigene Datenbank/Server und Datenbanktables bearbeiten. Zu den anderen Funktionen wie das MySQLDataReader komme ich in einem anderen Tutorial und werde es euch genaustens erklären, da mir doch gerade die Zeit ein wenig fehlt. Deswegen ist das doch wohl eher ein Show Code, anstatt ein Tutorial. Hoffe trozdem das dies euch weiterhelfen wird.

    Als nächtes kommt der 1.Button zum Einsatz, dieser dient zum Einloggen des Programm's.
    Dazu benutzen wir folgedes

    Quellcode

    1. [COLOR=#0000ff]private void [/COLOR]button1_Click_1([COLOR=#0000ff]object[/COLOR] sender, EventArgs e)
    2. {
    3. [COLOR=#0000ff]if[/COLOR] (tryLogin(textBox1.Text, textBox2.Text) == [COLOR=#0000ff]true[/COLOR])
    4. {
    5. MessageBox.Show("Eingeloggt!");
    6. frm.Show();
    7. Form frm = new Form2();
    8. [COLOR=#0000ff]this[/COLOR].Hide();
    9. }
    10. [COLOR=#0000ff]else[/COLOR]
    11. {
    12. MessageBox.Show("Benutzername oder Passwort ist falsch!");
    13. }
    14. }
    Alles anzeigen


    Quellcode

    1. [COLOR=#0000ff]if[/COLOR] (tryLogin(textBox1.Text, textBox2.Text) == true)

    diese Funktion frägt das public bool tryLogin was wir vorhin erstellt haben ab, der in unserem Fall Benutzername und Passwort von
    textBox1 und textBox2 mit der Datenbank übereinstimmt. Falls diese Eingaben richtig sind, kommen diese Funktionen ins Spiel:

    Quellcode

    1. MessageBox.Show("Eingeloggt!"); [COLOR=#008000]//Falls Benutzername und PW richtig waren, kommt eine Messagebox mit den Worten eingeloggt! [/COLOR]
    2. frm.Show();
    3. Form frm = new Form2(); [COLOR=#008000]//öffnet eine 2te Form fals die Daten richtig waren[/COLOR]
    4. [COLOR=#0000ff]this[/COLOR].Hide();[COLOR=#008000]// macht das Login Fenster unsichtbar.[/COLOR]

    Und falls die Eingaben falsch waren, kommt die else-Funktion zum Einsatz

    Quellcode

    1. MessageBox.Show("[COLOR=#ff0000]Benutzername oder Passwort ist falsch![/COLOR]");

    So bekommt ihr eine Messagebox mit der Message :"Benutzername oder Passwort ist falsch!"

    Wenn ihr nun alles befolgt habt, könnt ihr nun euer Programm mit einem MySQL Login versehen.
    Ich hoffe das dies euch ein wenig weitergeholfen hat.

    Liebe Grüße
  • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

  • Ich beschäftige mich zwar nicht mit C# (Naja, ein wenig ab und zu.) aber muss das hier
    frm.Show();
    Form frm = new Form2();

    nicht anders rum sein?
    Zuerst erstellen und dann anzeigen, oder versteh ich was Falsch?

    Abgesehen davon würde ich mir mehr Debug-Infos wünschen. Beispielsweise wenn die Verbindung zur DB nicht klappt. Dafür gibts schliesslich den "or die" Befehl. (Zumindest glaube ich das es "or die" war, bin mir nicht sicher. )
    Edit: Hab grad nachgeguckt. "MySqlException" sollte der richtige Befehl sein. "or die" hab ich wohl aus C++ oder php oder ... kA, irgendwo wird/wurde es verwendet.

    Ausserdem sagts du, ganz richtig, das man Übersichtlich arbeiten soll. Da würde ich mir dann aber schon andere Namen wünschen. TextBox1 und TextBox2 ist nicht besonders gut mMn.

    Edit: Ich nehme mal an, das in der MYSQL.DATA.dll die Datenbank enthalten ist, aber gibt es auch eine Möglichkeit sich die Struktur anzusehen? Es fällt nämlich schon Schwer, rauszufinden, warum die Verbindung nicht klappt, wenn man keine Ahnung hat, wie die Datenbank aufgebaut ist.
    (Vllt liegts aber auch nur an meiner Unfähigkeit mit C# und/oder meiner Unerfahrenheit mit Visual Studio.)
  • Retroid;313303 schrieb:

    mysqldata.dll ist ein mysql connector, dass das program überhaupt auf eine mysql datenbank zugreifen kann. Die Datenbank ansich, kannst du selber gestalten z.B in Navicat.


    Jop, das hab ich durch Google auch schon herrausgefunden. Aber wenn du schon MySQL Daten gibts, solltest du auch ne Erklärung dazu geben, sonst wird das alles etwas Verwirrend.
  • Ich finde aber mmn. nur dieses Video, was deinem Code auf anhieb so stark gleicht.
    Zudem gleichen sich einige Variablennamen bzw. Formnamen, wie z.B. "con", "cmd", "reader" und "tryLogin".
    Ausserdem ist die Anordnung der Befehle genau gleich.
    Bis auf die "unnötigen" Absätze z.B. zwischen der 1. und 2. If-Abfrage ist die Einrückung die selbe, wobei ich hierbei aber sagen muss, dass die Einrückung nicht viel aussagt.
  • Kaev, ich bitte dich. Gehe nicht weiter auf diesen Vorwurf ein. Retroid hat sich in seinen letzten beiden Beiträgen genug dazu geäußert und die Sache ist nun geklärt. Also müssen wir nicht weiter darüber diskutieren. Ok? (*g*)

    Mal davon abgesehen, dass der Code geklaut ist (wieso eigentlich? Jemand, der eine App und ein umfassendes 2D MMORPG programmieren kann, sollte DAS doch ein Kinderspiel sein ...), sehe ich darin auch keinen Sinn. Ich meine, du setzt die Zugangsdaten zur Datenbank in das Programm?! :D
    Bau doch am besten noch einen Button ein, der die Zugangsdaten zur Datenbank direkt ausgibt, falls man seine Kontodaten einmal vergessen haben sollte. Dann erspart man sich den Aufwand, sie abzufangen oder sonst irgendwie aus dem Programm zu fischen. Unsicherer wird es dadurch ja auch nicht mehr. *g*

    Abgesehen davon würde ich mir mehr Debug-Infos wünschen. Beispielsweise wenn die Verbindung zur DB nicht klappt. Dafür gibts schliesslich den "or die" Befehl. (Zumindest glaube ich das es "or die" war, bin mir nicht sicher. )
    Edit: Hab grad nachgeguckt. "MySqlException" sollte der richtige Befehl sein. "or die" hab ich wohl aus C++ oder php oder ... kA, irgendwo wird/wurde es verwendet.

    "or die" ist / war ganz, ganz, gaaanz hässliches PHP. :)
  • Und wieder einmal bestätigt es meine Vermutung das Retroid nichts anderes als Fame Geil ist. Er kann nichts, er ist nichts und er wird auch nie etwas sein.....

    Bitte tu der Community und dir einen Gefallen und verlasse M-Core. Du bist es weder würdig ein Mitglied der Community zu sein, noch ein Moderator eines Bereiches.

    @an die Führungspersonen des Forums
    Also langsam macht ihr euch lächerlich. Ihr wollt uns allen erzählen das sich dieser Heini durch gute Posts und Kommentare den Posten als Mod erkämpft hat? Das ich nicht lache. Entweder wollt ihr mutwillig dieses Forum zerstören oder ihr habt nicht mehr alle Tassen im Schrank und findet solch ein Verhalten normal.

    Ich garantiere euch das immer mehr Leute gehen werden, und dann steht ihr da und heult rum so wie es jetzt schon teilweiße ist.

    Wenn es nach mir ginge würde ich direkt ein Konkurrenzforum erstellen und alle User abwerben. Denn in meinen Augen ist M-Core im Moment nicht mal den Dreck unter dem Fingernagel wert.

    * Dieses Verwanung/diesen Bann nehme ich gerne in den Kauf, und so wie sich alles entwickelt wird der Post ja eh gelöscht, da Meinungsfreiheit hier ebenfalls nicht mehr zählt *
  • ulle;313334 schrieb:

    Und wieder einmal bestätigt es meine Vermutung das Retroid nichts anderes als Fame Geil ist. Er kann nichts, er ist nichts und er wird auch nie etwas sein.....

    Bitte tu der Community und dir einen Gefallen und verlasse M-Core. Du bist es weder würdig ein Mitglied der Community zu sein, noch ein Moderator eines Bereiches.

    @an die Führungspersonen des Forums
    Also langsam macht ihr euch lächerlich. Ihr wollt uns allen erzählen das sich dieser Heini durch gute Posts und Kommentare den Posten als Mod erkämpft hat? Das ich nicht lache. Entweder wollt ihr mutwillig dieses Forum zerstören oder ihr habt nicht mehr alle Tassen im Schrank und findet solch ein Verhalten normal.

    Ich garantiere euch das immer mehr Leute gehen werden, und dann steht ihr da und heult rum so wie es jetzt schon teilweiße ist.

    Wenn es nach mir ginge würde ich direkt ein Konkurrenzforum erstellen und alle User abwerben. Denn in meinen Augen ist M-Core im Moment nicht mal den Dreck unter dem Fingernagel wert.

    * Dieses Verwanung/diesen Bann nehme ich gerne in den Kauf, und so wie sich alles entwickelt wird der Post ja eh gelöscht, da Meinungsfreiheit hier ebenfalls nicht mehr zählt *


    Das war zu Kyforys Zeiten, denke das wird so schnell nicht passieren, musst uns wohl oder übel erhalten bleiben.