如何在文本框中显示所选记录

时间:2016-02-09 02:53:20

标签: c# mysql

所以我试图将我桌子上的选定记录放入文本框中,更具体地说,是用户的名字和ID。

textBox2显示名字,textBox3显示ID。从技术上讲,它可以工作,但它始终显示表中的最后记录,而不是用户用来登录的特定记录。

例如,textBox2显示“Bob”,textBox3显示“2”,据说他们应该显示“Bill”和“1”。

提前感谢您的帮助。

void login()
    {
        string firstName;
        string studentID;

        string path = "Data Source = LOCALHOST; Initial Catalog =library ; username='root';password=''";
        MySqlConnection con = new MySqlConnection(path);
        string sqlSelect = "select * from users";
        MySqlCommand sqlCommand = new MySqlCommand(sqlSelect, con);
        try
        {
            con.Open();
            using (MySqlDataReader sqlReader = sqlCommand.ExecuteReader())
            {
                while (sqlReader.Read())
                {
                    firstName = sqlReader["FirstName"].ToString();
                    studentID = sqlReader["ID"].ToString();
                    textBox2.Text = firstName;
                    textBox3.Text = studentID;
                }
            }
        }
        catch
        {
            con.Close();
        }
    }

以第一种形式登录的代码。

void login()
    {
        string userName;
        string password;
        string userType;

        string path = "Data Source = LOCALHOST; Initial Catalog =library ; username='root';password=''";
        MySqlConnection con = new MySqlConnection(path);
        string sqlSelect = "select * from users WHERE Username = '" + textBox1.Text + "' AND Password = '" + textBox2.Text + "'";
        MySqlCommand sqlCommand = new MySqlCommand(sqlSelect, con);

        try
        {
            con.Open();
            using (MySqlDataReader sqlReader = sqlCommand.ExecuteReader())
            {
                while (sqlReader.Read())
                {
                    userName = sqlReader["Username"].ToString();
                    password = sqlReader["Password"].ToString();
                    userType = sqlReader["UserType"].ToString();

                    if (textBox1.Text == userName)
                    {
                    if (textBox2.Text == password)
                        {
                            if (comboBox1.Text == userType)
                            {
                                if (userType == "Admin")
                                {
                                    MessageBox.Show("Logged in as Admin", "Login");
                                    Admin frmAdmin = new Admin();
                                    this.Hide();
                                    frmAdmin.Show();
                                }
                                else if (userType == "Student")
                                {
                                    MessageBox.Show("Logged in as Student", "Login");
                                    Student frmStudent = new Student();
                                    this.Hide();
                                    frmStudent.Show();
                                }
                            }
                        }
                    }
                }
            }
        }
        finally
        {
            con.Close();
        }


    }

3 个答案:

答案 0 :(得分:2)

您正在从表格中选择所有用户。您需要一些WHERE逻辑将结果集限制为1行。否则你的while循环将迭代,直到返回最后一条记录,那些将是显示的值。

答案 1 :(得分:0)

您正在获取查询中的所有用户数据

string sqlSelect = "select * from users";

当你应该只获得登录用户的那个时,例如

string sqlSelect = "select * from users WHERE id=<ID of user logged in>";

while循环使用表中每个用户的信息覆盖/更新textBox2和textBox3,因此当它完成时,它总是在最后一个用户上。 因此,如果您只登录用户,则会正确显示信息。 希望我帮忙。

答案 2 :(得分:0)

您一遍又一遍地重写TextBox值,直到到达最后一个。如果您只想在文本框中显示第一条记录,请使用以下查询:

string sqlSelect = "select TOP 1 * from users";

编写列名而不是*。它提高了查询速度

如果您要搜索特定用户,请尝试:

string sqlSelect = string.Format("select * from users where username={0}",username); //supposed the login-ed user name is saved in username

或者

string sqlSelect = string.Format("select * from users where id={0}",userId); //supposed the login-ed user id is saved in userId

<强>更新

要保留用户名和其他信息,请使用public string并以您需要的所有表单形式使用它。您可以在单独的类中初始化它:

public static string Username;