2017-01-21 15 views
-3

ローカルのMySqlデータベースに接続するように設定したC#フォームアプリケーションがありますが、コードを実行すると例外があるようです。誰が私になぜこれが起こるか教えてもらえますか?私はどこにでも私の質問に対する答えを見つけることができません。コード実行時のMySql + C#例外

これは例外である:

System.NullReferenceExceptionは、未処理のメッセージであった:タイプの未処理 例外「System.NullReferenceException」が BankingApp.exeで発生しました追加情報:オブジェクト参照が インスタンスに設定されていませんオブジェクトの

これはコードです:

string Username; 
    string Password; 

    private MySqlConnection conn; 
    private string uid; 
    private string server; 
    private string database; 
    private string email; 
    private string password; 
    private int port; 


    //database 
    public void DatabaseConnect() 
    { 
     server = "localhost"; 
     database = "users"; 
     port = 3306; 
     uid = "root"; 
     password = "test12345"; 
     string connString; 
     connString = $"SERVER={server}; PORT={port}; DATABASE={database}; UID={uid}; PASSWORD={password};"; 
     string ex; 
     conn = new MySqlConnection(connString); 
    } 

    public bool isLogin(string email, string password) 
    { 
     string query = $"SELECT * FROM users WHERE email='{email}' AND password='{password}';"; 

     try 
     { 
      if (OpenConnection()) 
      { 
       MySqlCommand cmd = new MySqlCommand(query, conn); 
       MySqlDataReader reader = cmd.ExecuteReader(); 

       if (reader.Read()) 
       { 
        reader.Close(); 
        conn.Close(); 
        return true; 
       } 
       else 
       { 
        reader.Close(); 
        conn.Close(); 
        return false; 
       } 
      } 
      else 
      { 
       conn.Close(); 
       return false; 
      } 
     } 
     catch (Exception ex) 
     { 
      conn.Close(); 
      return false; 
     } 
    } 
    public bool Register(string email, string password) 
    { 
     string query = $"INSERT INTO users (email, password) VALUES ('', '{email}', '{password}');"; 

     try 
     { 
      if (OpenConnection()) 
      { 
       MySqlCommand cmd = new MySqlCommand(query, conn); 

       try 
       { 
        cmd.ExecuteNonQuery(); 
        return true; 

       } 
       catch (Exception ex) 
       { 
        return false; 
       } 

      } 
      else 
      { 
       conn.Close(); 
       return false; 

      } 

     } 
     catch (Exception ex) 
     { 
      conn.Close(); 
      return false; 

     } 
    } 

    private bool OpenConnection() 
    { 
     try 
     { 
      conn.Open(); 
      return true; 
     } 
     catch (MySqlException ex) 
     { 
      switch (ex.Number) 
      { 
       case 0: 
        MessageBox.Show("Can't connect to database, please check your internet connection"); 
        break; 
       case 1045: 
        MessageBox.Show("Email or Password is incorrect, new user? buy the tool by pressing buy!"); 
        break; 
      } 

     } 
     return false; 
    } 

、これはあなたを登録するボタンのコードは、このボタンを押したときに例外が発生している:

private void registerButton_Click(object sender, EventArgs e) 
    { 
     email = emailField.Text; 
     password = passwordField.Text; 

     if (Register(email, password)) 
     { 
      button1.Show(); 
      emailField.Hide(); 
      passwordField.Hide(); 
      loginButton.Hide(); 
      buyButton.Hide(); 
      label1.Hide(); 
      label2.Hide(); 
      label4.Show(); 
     } 
     else 
     { 
      MessageBox.Show("User has not been created"); 
     } 
    } 

} 
+0

あなたのメソッド 'DatabaseConnect()'はおそらく 'Register()'を呼び出す前に呼び出す必要があります、 'conn'は恐らくnullです。 –

答えて

0

コールDatabaseConnect( )より前OpenConnection()。このシナリオでOpenConnection()を実行し、接続を開こうとしますconn.Open()あなたのconnは有効な接続ではありません。

0

私はそれを理解しました。 DatabaseConnect()のコード:

 server = "localhost"; 
     database = "users"; 
     port = 3306; 
     uid = "root"; 
     password = "test12345"; 
     string connString; 
     connString = $"SERVER={server}; PORT={port}; DATABASE={database}; UID={uid}; PASSWORD={password};"; 
     string ex; 
     conn = new MySqlConnection(connString); 

は、代わりにLogin()メソッドで記述する必要がありました。

関連する問題