Announcement

Collapse
No announcement yet.

Geht das nicht einfacher ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Geht das nicht einfacher ?

    hallo C#-user,

    bin neu hier und versuche zu erfahren, ob der folgende code-block nicht einfacher gestaltet werden kann???

    der sinn des codes ist, die eingabe eines "benutzernamens" und eines "kennwortes" zu prüfen. beide informationen befindet sich in einer "mysql"-database, auf die ich über den "bytefx"-mysql-provider zugreife.

    methoden wie "myLib." oder "ProgInfo1" stammen aus selbstgeschriebenen klassen. da ich keine steuerelement zur anzeige der daten aus der datenbank verwende, habe ich halt versucht, die werte aus der SELECT-anweisung in einem array zu speichern und dann abzufragen...

    funktioniert hervorragend, doch es ist leider ziemlich viel code für so wenig funktionalität. geht das nicht einfacher ???

    <PRE>
    // ***********************************//
    // Button "btnOK"
    // ***********************************//

    private void btnOK_Click_1(object sender, System.EventArgs e)
    {
    string mySele = "SELECT u.BenutzerName, u.Kennwort, a.Name, a.Vorname FROM " +
    myLib.myDatabase + ".user AS u, " + myLib.myDatabase + ".adresse AS a " +
    "WHERE (BenutzerName = '" + textBox1.Text + "') AND (Kennwort = '" + textBox3.Text + "') " +
    "AND (a.AdressNr=u.AdressNr)";

    myLib.StartOK = false;
    MySqlCommand myCommand = new MySqlCommand(mySele, myLib.myConnect);
    myLib.myConnect.Open();
    ControlCheck(this, false);

    try {
    MySqlDataReader myReader = myCommand.ExecuteReader();

    try {
    bool loginOK = myReader.HasRows;
    string[] myArray = new string[4];

    if (loginOK) {
    while (myReader.Read()) {
    for (int i = 0; i < myReader.FieldCount; i++)
    myArray[i] = myReader.GetValue(i).ToString();
    }
    loginOK = (myArray[0] == textBox1.Text) && (myArray[1] == textBox3.Text);
    }

    myLib.StartOK = loginOK;

    if ( loginOK ) {
    Close();
    } else {
    ProgInfo1.Hinweis("Das Kennwort ist leider falsch, Bitte versuchen Sie es erneut...");
    ControlCheck(this, true);
    textBox3.Focus();
    }

    } catch (MySqlException ex) {
    ProgInfo1.Fehler(ex.Message.ToString());
    } catch (Exception ex){
    ProgInfo1.Fehler(ex.Message.ToString());
    } finally {
    myReader.Close(); myLib.myConnect.Close();
    }

    } catch (MySqlException ex) {
    ProgInfo1.Fehler(ex.Message.ToString());
    } finally {
    myLib.myConnect.Close();
    ControlCheck(this, true);
    }
    }
    </PRE>

  • #2
    viel wichtiger:

    http://www.developer.com/db/article.php/2243461

    steffe

    Comment


    • #3
      Hallo Steffen,

      der Artikel ist ja ganz nett!

      Aber zum einen erstelle ich eine WindowsForms-Anwendung und zum zweiten beantwortet dieser Artikel meine Frage leider nicht..

      Comment


      • #4
        na ich würde erstmal schauen, ob dieser verschachtelte try-catch-block nötig ist.

        wenn du davon ausgehst, dass nur ein ergebnis geliefert wird, brauchst du keine while-schleife für myReader.Read().

        und wenn du die infos eh nicht weiter brauchst, kannst du auch gleich abfragen:
        myReader.GetValue(0).ToString() == textBox1.Text

        ob das schön ist, weiss ich nicht. mich verwirren string-vergleiche mit == sowieso. bin da java-geschädigt.

        also kürzen kannst du allemal!

        steffen :-

        Comment


        • #5
          hallo steffen,

          ok, ich werde da mal was nachbauen. schon mal danke für die info..

          Comment

          Working...
          X