2017-02-27 2 views
0

パラメータ化されたSQLとクロステーブルクエリを使用してログインシステムを作成しようとしています。ユーザー名とパスワードは、両方のテーブル「先生」と「学生であるためC#でのSQLエラーの条件文[offTopic]

private void userloigin() { 

    using (MySqlConnection connection = new MySqlConnection("datasource=**;port=***;database=***;username=***;password=***;")) { 

     MySqlCommand cmd = new MySqlCommand("SELECT * FROM student, teacher WHERE (student.Username = @userName AND student.Password = @passWord) OR (teacher.username = @teacherUser AND teacher.password = @teacherPass);"); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = connection; 
     cmd.Parameters.AddWithValue("@userName", textboxUsername.Text); 
     cmd.Parameters.AddWithValue("@passWord", texBoxPassword.Text); 
     cmd.Parameters.AddWithValue("@teacherUser", textboxUsername.Text); 
     cmd.Parameters.AddWithValue("@teacherPass", texBoxPassword.Text); 
     connection.Open(); 
     MySqlDataReader DBReader; 
     cmd.Connection = connection; 
     DBReader = cmd.ExecuteReader(); 
     int check = 0; 
     while (DBReader.Read()) { 
      var teacherLogin = DBReader.GetString("username"); 
      var teacherPass = DBReader.GetString("password"); 
      var studentLogin = DBReader.GetString("Username"); 
      var studentPass = DBReader.GetString("Password"); 

      if (teacherLogin == textboxUsername.Text && teacherPass == texBoxPassword.Text) { 
       MessageBox.Show("Login Successfull!"); 
       this.Hide(); 
       Registration ss = new Registration(); 
       ss.Show(); 
      } else if (studentLogin == texBoxPassword.Text && studentPass == texBoxPassword.Text) { 
       MessageBox.Show(" Login Successfull"); 

       this.Hide(); 
       Test ss = new Test(); 
       ss.Show(); 
      } else { 
       MessageBox.Show("Username or Password Incorrect. Try Again please"); 
      } 
     } 
    } 
} 

これは、C#での私のログインのための私のコードです。ログインすると、生徒はログインできますが、先生はログインできません。どちらが理解できる。私はしかし:

を型「System.IndexOutOfRangeException」の未処理の例外がMySql.Data

で発生しました追加情報:指定されたが見つかりませんでした

tbl_name.col_name 

私はエラーが言ってもらいます結果内の列:teacher.username

var teacherLogin = DBReader.GetString("teacher.username"); 
var teacherPass = DBReader.GetString("teacher.password"); 
var studentLogin = DBReader.GetString("student.Username"); 
var studentPass = DBReader.GetString("student.Password"); 

質問:

「教師」がサインインして教師を登録フォームに登録するようにコードを修正するにはどうすればよいですか?

同じように、学生がサインインした場合、学生をテストフォームに連れて行きますか?

私は間違っていますか?

 using (MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;database=project;username=root;password=Greenford123;")) 
     { 
      MySqlCommand cmd = new MySqlCommand("SELECT student.studentUsername, student.studentPassword, teacher.teacherUsername, teacher.teacherPassword FROM student, teacher WHERE (student.studentUsername = @userName AND student.studentPassword = @passWord) OR (teacher.teacherUsername = @teacherUser AND teacher.teacherPassword = @teacherPass);"); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = connection; 
      cmd.Parameters.AddWithValue("@userName", textboxUsername.Text); 
      cmd.Parameters.AddWithValue("@passWord", texBoxPassword.Text); 
      cmd.Parameters.AddWithValue("@teacherUser", textboxUsername.Text); 
      cmd.Parameters.AddWithValue("@teacherPass", texBoxPassword.Text); 
      connection.Open(); 
      MySqlDataReader DBReader; 
      cmd.Connection = connection; 
      DBReader = cmd.ExecuteReader(); 

      while (DBReader.Read()) 
      { 
       var teacherLogin = DBReader.GetString("teacherUsername"); 
       var teacherPass = DBReader.GetString("teacherPassword"); 
       var studentLogin = DBReader.GetString("studentUsername"); 
       var studentPass = DBReader.GetString("studentPassword"); 

       if (teacherLogin == textboxUsername.Text && teacherPass == texBoxPassword.Text) 
       { 
        MessageBox.Show("Login Successfull!"); 

        this.Hide(); 
        Registration ss = new Registration(); 
        ss.Show(); 
       } 
       else if (studentLogin == texBoxPassword.Text && studentPass == texBoxPassword.Text) 
       { 
        MessageBox.Show(" Login Successfull"); 

        this.Hide(); 
        Test ss = new Test(); 
        ss.Show(); 
       } 
       else 
       { 
        MessageBox.Show("Username or Password Incorrect. Try Again please"); 
       } 

      } 

EDIT: その作業になりましたが、それは唯一のシステムへの教師のアクセスを可能にします。学生がログインしようとすると、

間違ったユーザー名またはパスワードと表示されます。

+2

で代わりにこれを修正します。例MSSQLSM Studioでクエリを実行すると、カラムヘッダーが 'teacher.username'ではなく' Username'' Password'で表示されます。 – Hexxed

+0

などです。クエリを作成する必要があります列名の値は? – CSEngine

+0

この場合、MSSQLとMySQLは同じような動作をすると思います。 '*'のかわりに選択する列を指定してください。 –

答えて

1

エラーが原因でこの

else if (studentLogin == texBoxPassword.Text && studentPass == texBoxPassword.Text) 

どこstudentLogin == texBoxPassword.Textので、

間違ったユーザー名またはパスワードであるもう一度してくださいしてみてください。

は、クエリは、実際の列名としてカラム名を返すので、あなたはそのエラーを取得している

else if (studentLogin == textboxUsername.Text && studentPass == texBoxPassword.Text) 
+0

きれいに完了していません – CSEngine

+1

問題のない友達。私はあなたがそれに気づき、誰かがコメントでそれを指摘してくれるのを待つことを望んでいました。 –