如何获取用户的ID以查看模型? [登录表单]

时间:2019-01-23 09:57:55

标签: c# mysql visual-studio

所以我正在从事这个项目。 基本上我正在尝试制作一个登录表单。 并且我需要获取表“ users”内的ID,但是我不知道怎么办? 有人可以告诉我它是如何完成的吗?

我尝试将其从bool更改为int并返回ID。

create table users(
id int not null auto_increment,
FirstName varchar(255),
LastName varchar(255),
isTeacher bool,
TeachingSubject varchar(255),
loginUsername varchar(12),
loginPassword varchar(12),
PRIMARY KEY (ID)
);



public bool LoginUser(LoginViewmodel userLogin)
    {
            var cmdCommand = "select count(1) from users WHERE loginUsername=@LOGINUSER AND loginPassword=@LOGINPASS;";
            OpenConnection();
            MySqlCommand loginCommand = new MySqlCommand(cmdCommand, studentsConnection);
            loginCommand.Parameters.AddWithValue("@LOGINUSER", userLogin.LoginUsername);
            loginCommand.Parameters.AddWithValue("@LOGINPASS", userLogin.LoginPassword);
            var test = Convert.ToInt32(loginCommand.ExecuteScalar());
            userLogin.Id = test;
            Console.WriteLine(userLogin.Id);
            CloseConnection();
            if (test == 1)
            {
                return true;
            }
            else
            {
                throw new BadLoginCredentialsException();
            }
        }




    public class LoginViewmodel
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public bool isTeacher { get; set; }
    public string TeachingSubject { get; set; }
    public string LoginUsername { get; set; }
    public string LoginPassword { get; set; }
    public int Id { get; set; }
    }





public WorkList()
    {
        LoginViewmodel userLogin = new LoginViewmodel();
        //loginUserId = 1;
        lblUserId.Text = userLogin.Id.ToString(); // i need to put the id into a label here
        }

它需要将用户ID写入视图模型,以便我可以其他形式使用它们。

3 个答案:

答案 0 :(得分:0)

我不确定select语句中的“ count(1)”是什么,如果您希望从“ @LOGINUSER”和“ @LOGINPASS”记录中获取ID,则肯定需要将其为“ id”匹配给定的。

答案 1 :(得分:0)

尝试一下。由于COUNT(1)将返回匹配数目,因此,如果没有重复项,您将始终得到1或0。您需要用户的实际ID。

将返回类型更改为int,而不是bool,并将count(1)更改为用户ID的实际列名,然后返回该值。

public int LoginUser(LoginViewmodel userLogin)
    {
            var cmdCommand = "select userIdColumnName from users WHERE loginUsername=@LOGINUSER AND loginPassword=@LOGINPASS;";
            OpenConnection();
            MySqlCommand loginCommand = new MySqlCommand(cmdCommand, studentsConnection);
            loginCommand.Parameters.AddWithValue("@LOGINUSER", userLogin.LoginUsername);
            loginCommand.Parameters.AddWithValue("@LOGINPASS", userLogin.LoginPassword);
            var test = Convert.ToInt32(loginCommand.ExecuteScalar());
            userLogin.Id = test;
            Console.WriteLine(userLogin.Id);
            CloseConnection();
            if (test > 0)
            {
                return test;
            }
            else
            {
                return 0
            }
        }

请注意退货中的更改

if (test > 0)
                {
                    return test;
                }
                else
                {
                    return 0
                }

只要没有用户将userId设置为0,就可以解决您的问题。

答案 2 :(得分:0)

首先更改您在方法中使用的SQL。如果您计算行数,您将无法获得用户ID(至少我不认为可以) 因此,使您的SQL像这样:

"select * from users WHERE loginUsername=@LOGINUSER AND loginPassword=@LOGINPASS";

使用

更改MySqlCommand
MySqlDataAdapter dtReader = new MySqlDataAdapter(cmdCommand, con);
//con is your connection ofc

之后,您可以像这样

检索返回的值。
DataTable dt = new DataTable();
dtReader.Fill(dt);

然后,您只需在dt.Rows和dt.Rows中进行for循环即可。如果需要,您可以计数。

一旦您从SQL获得正确的信息,您就有2个选项,您可以更改方法的返回类型,也可以在方法中使用OUT参数删除该值。 对于输出,您必须像这样更改您的方法:

 public bool LoginUser(LoginViewmodel userLogin, out string UserId)
        {
            var cmdCommand = "select count(1) from users WHERE loginUsername=@LOGINUSER AND loginPassword=@LOGINPASS;";
            OpenConnection();
            MySqlDataAdapter dtReader = new MySqlDataAdapter(cmdCommand, con);
            dtReader.SelectCommand.Parameters.AddWithValue("@LOGINUSER", userLogin.LoginUsername);
            dtReader.SelectCommand.Parameters.AddWithValue("@LOGINPASS", userLogin.LoginPassword);
            DataTable dt = new DataTable();
            dtReader.Fill(dt);
            if (dt.Rows.Count == 1)
            {
                UserId = dt.Rows[0]["Id"].ToString();
                return true;
            }
            else
            {
                throw new BadLoginCredentialsException();
            }
        }