C # UWP Форма входа, проверяющая учетные данные в удаленной базе данных MySQL

0

Я застрял после нескольких часов исследований. Я пытаюсь создать базовое универсальное приложение Windows с формой входа - после нажатия кнопки учетные данные в текстовых окнах проверяются с помощью удаленной базы данных MySQL. Если это действительно так, приложение shoud переместится на другую указанную страницу. Если нет, отображается сообщение об ошибке.

Я не могу найти ошибку в моем коде ниже. После нажатия кнопки "синие круги" Windows и через пару секунд вернутся к VS2017. Нет ошибок и предупреждений. State.ToString() возвращает "Открыть", поэтому у меня есть соединение с БД. Что я делаю неправильно?

    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 Username=@user AND Password=@pass;");

        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...";
        }
    }
}
Теги:
uwp
windows-10-universal

1 ответ

-2
Лучший ответ

Полное рабочее решение:

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 Username=@user AND Password=@pass;", 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
    Я бы порекомендовал удалить cmd.Connection = conn; и замена if (login.Read()) { conn.Close(); return true; } else { conn.Close(); return false; } с return login.Read();
  • 0
    спасибо за дополнительные улучшения, работает как шарм

Ещё вопросы

Сообщество Overcoder
Наверх
Меню