2017-12-12 1 views
0

Ich blieb nach ein paar Stunden der Forschung stecken. Ich versuche, eine grundlegende universelle Windows-App mit Login-Formular zu machen - nach dem Klicken auf eine Schaltfläche, Anmeldeinformationen in Textfeldern werden mit Remote-MySQL-Datenbank überprüft. Falls gültig, sollte die App zu einer anderen angegebenen Seite navigieren. Wenn nicht, wird eine Fehlermeldung angezeigt.C# UWP Login Formular Überprüfung der Anmeldeinformationen in MySQL Remote-Datenbank

Ich kann keinen Fehler in meinem Code unten finden. Nach dem Klick auf den Button Windows springt der blaue Kreis und nach einigen Sekunden kehrt er zu VS2017 zurück. Keine Fehler und Warnungen. State.ToString() gibt 'Open' zurück, also habe ich eine Verbindung mit DB. Was mache ich falsch?

public sealed partial class MainPage : Page 
{ 
    const string connString = "server=my_server;pwd=pass;uid=user_id;database=mydb;persistsecurityinfo=True"; 
    MySqlConnection conn = new MySqlConnection(connString); 

    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private void DbConnection() 
    { 
     try 
     { 
      conn.Open(); 
     } 
     catch (MySqlException e) 
     { 
      throw; 
     } 
    } 

    private bool DataValidation(string user, string pass) 
    { 
     DbConnection(); 
     MySqlCommand cmd = new MySqlCommand("SELECT Username, Password FROM Users WHERE [email protected] AND [email protected];"); 

     cmd.Parameters.AddWithValue("@user", user); 
     cmd.Parameters.AddWithValue("@pass", pass); 
     cmd.Connection = conn; 

     MySqlDataReader login = cmd.ExecuteReader(); 
     if (login.Read()) 
     { 
      conn.Close(); 
      return true; 
     } 
     else 
     { 
      conn.Close(); 
      return false; 
     } 
    } 

    private void LoginBtn_Click(object sender, RoutedEventArgs e) 
    { 
     string user = UserTextBox.Text; 
     string pass = PassTextBox.Text; 

     if (user == "" || pass == "") 
     { 
      StatusTextBlock.Text = ("No emty fields allowed. Try again..."); 
      return; 
     } 

     bool loginSuccessful = DataValidation(user, pass); 

     if (loginSuccessful) 
     { 
      this.Frame.Navigate(typeof(Page2), null); 
     } 
     else 
     { 
      StatusTextBlock.Text = "Invalid e-mail or password. Try again..."; 
     } 
    } 
} 
+0

'State.ToString()' Was ist 'State'? Es ist nicht in deinem Code. – mjwills

+3

Ich würde vorschlagen, 'MySqlConnection conn = new MySqlConnection (connString);' innerhalb von 'DataValidation' zu verschieben und' DbConnection' zu entfernen. Verwenden Sie dann einen 'using'-Block, um ihn automatisch zu disposieren (schließen). – mjwills

+0

Nein, es ist nicht in meinem Code oben, aber StatusTextBox.Text = conn.State.ToString() gibt Verbindungsstatus zurück, der offen zu sein scheint – grAVEr666

Antwort

-1

komplette Arbeitslösung:

using MySql.Data.MySqlClient; 

namespace Project 
{ 

public sealed partial class MainPage : Page 
{ 
    const string connString = "server=server_name;user id=uid;pwd=password;persistsecurityinfo=True;database=db_name"; 

    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private bool DataValidation(string user, string pass) 
    { 
     using (MySqlConnection conn = new MySqlConnection(connString)) 
     using (MySqlCommand cmd = new MySqlCommand("SELECT " + 
      "Username, Password " + 
      "FROM users " + 
      "WHERE [email protected] AND [email protected];", conn)) 
     { 

      cmd.Parameters.AddWithValue("@user", user); 
      cmd.Parameters.AddWithValue("@pass", pass); 
      cmd.Connection = conn; 
      cmd.Connection.Open(); 

      MySqlDataReader login = cmd.ExecuteReader(); 
      if (login.Read()) 
      { 
       conn.Close(); 
       return true; 
      } 
      else 
      { 
       conn.Close(); 
       return false; 
      } 
     } 
    } 

    private void LoginBtn_Click(object sender, RoutedEventArgs e) 
    { 
     string user = UserTextBox.Text; 
     string pass = PassBox.Password; 

     if (user == "" || pass == "") 
     { 
      StatusTextBlock.Text = ("Your text"); 
      return; 
     } 

     bool loginSuccessful = DataValidation(user, pass); 

     if (loginSuccessful) 
     { 
      this.Frame.Navigate(typeof(Page2), null); 
     } 
     else 
     { 
      StatusTextBlock.Text = "Your text"; 
     } 
    } 
} 
} 
+0

gepostet Ich würde empfehlen, 'cmd.Connection = conn;' 'zu entfernen und ersetzen 'if (login.Read()) { conn.Close(); Rückkehr wahr; } sonst { conn.Close(); Rückgabe false; } 'mit' return login.Read(); ' – mjwills

+0

danke für zusätzliche Verbesserungen, funktioniert wie ein Charme – grAVEr666