パラメータ化された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: その作業になりましたが、それは唯一のシステムへの教師のアクセスを可能にします。学生がログインしようとすると、
間違ったユーザー名またはパスワードと表示されます。
で代わりにこれを修正します。例MSSQLSM Studioでクエリを実行すると、カラムヘッダーが 'teacher.username'ではなく' Username'' Password'で表示されます。 – Hexxed
などです。クエリを作成する必要があります列名の値は? – CSEngine
この場合、MSSQLとMySQLは同じような動作をすると思います。 '*'のかわりに選択する列を指定してください。 –