繁体   English   中英

C#中的SQL错误中的条件语句[offTopic]

[英]conditional statement in sql error in C# [offTopic]

我正在尝试通过使用参数化的sql和跨表查询来创建登录系统。

这是我在C#中登录的代码:

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");
            }
        }   
    }
}

由于用户名和密码都在两个表格“老师”和“学生”中。 登录名将允许学生登录,但不能登录老师。 这是可以理解的。 但是,当我这样做时:

tbl_name.col_name

我收到一条错误消息:

MySql.Data中发生了类型为'System.IndexOutOfRangeException'的未处理异常

附加信息:在结果中找不到指定的列: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");
                }

            }

编辑:它现在可以工作,但只允许教师访问系统。 如果学生尝试登录,它将说

错误的用户名或密码。 请再试一次

错误是因为这样

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

因此, studentLogin == texBoxPassword.Text

错误的用户名或密码。

改正这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM