2017-12-12 21 views
0

数時間の研究が終わってしまいました。私は、ログインフォームで基本的なユニバーサルWindowsアプリケーションを作ろうとしています - ボタンをクリックした後、テキストボックスの認証情報はリモートのMySQLデータベースでチェックされます。有効な場合、アプリは指定された別のページに移動します。そうでない場合、エラーメッセージが表示されます。C#UWP MySQLリモートデータベースのログインフォームの資格情報を確認する

以下のコードでエラーが見つかりません。ボタンをクリックすると、Windowsの青い円が回転し、数秒後にVS2017に戻ります。エラーや警告はありません。私はDBとの接続を持っているので、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 [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()' 'State'は何ですか?それはあなたのコードではありません。 – mjwills

+3

私は 'DataValidation'の中で' MySqlConnection conn = new MySqlConnection(connString); 'を移動し、' DbConnection'を削除することをお勧めします。そして 'using'ブロックを使って自動的にDispose(Close)します。 – mjwills

+0

これは私のコードではありませんが、StatusTextBox.Text = conn.State.ToString()は開いていると思われる接続状態を返します – grAVEr666

答えて

-1

完全な作業溶液:

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

'cmd.Connection = conn; if(login.Read())を置き換えます。 { conn.Close(); がtrueを返します。 } else { conn.Close(); falseを返します。 } ''返信login.Read(); ' – mjwills

+0

おかげさまで改善のおかげで、魅力的な作品 – grAVEr666

関連する問題