根据MySQL数据库数据显示消息? C#

时间:2014-10-06 03:49:52

标签: c# mysql windows windows-store-apps int

我想从MySQL数据库中获取值,并且需要根据值显示消息。但它不会发生,并且始终显示int privilege为0.如果我没有指定该默认值,则会在代码上显示错误。

如何解决此问题并根据int privilege值显示消息?

private void button_login_Click(object sender, RoutedEventArgs e)
{

    string username = usernameInput.Text;
    string password = passwordInput.Password;
    int privilege = 0;

    try
    {                
        //This is command class which will handle the query and connection object.
        string Query = "SELECT`tbl_user_login`.`u_id`,`tbl_user_login`.`u_username`,
                 `tbl_user_login`.`u_password`,`tbl_user_login`.`u_privilege` 
                 FROM `bcasdb`.`tbl_user_login`WHERE `tbl_user_login`.`u_username` = '"
                 + username + "' AND `tbl_user_login`.`u_password` ='" + password 
                 + "' AND `tbl_user_login`.`u_privilege` = @privi;";
        MySqlConnection conn = 
                     new MySqlConnection(BCASApp.DataModel.DB_CON.connection);
        MySqlCommand cmd = new MySqlCommand(Query, conn);
        cmd.Parameters.AddWithValue("@privi", privilege);
        MySqlDataReader MyReader;
        conn.Open();
        MyReader = cmd.ExecuteReader();
          // Here our query will be executed and data saved into the database.

        if (MyReader.HasRows && this.Frame != null)
        {
            while (MyReader.Read())
            {

                if (privilege == 1)
                {
                    DisplayMsgBox("click ok to open the admin page ", "OK");
                }
                if (privilege == 2)
                {
                    DisplayMsgBox("click ok to open the staff page ", "OK");
                }
                else
                {
                    DisplayMsgBox("privilege 0", "ok");
                }   
            }
        }                
        else
        {
            DisplayMsgBox("sucess else", "ok");
        }

        conn.Close();
    }
    catch (Exception )
    {
        DisplayMsgBox("sucess catch", "ok");
    }
}

2 个答案:

答案 0 :(得分:0)

如果我没有错,则该特权将作为字符串类型返回。尝试将其作为字符串,然后将其转换为整数?

答案 1 :(得分:0)

您尝试执行的操作似乎是检查u_privilege表中tbl_user_login列的值,而不是根据privilege制作where条件。你需要删除条件

AND `tbl_user_login`.`u_privilege` = @privi

并删除参数分配

cmd.Parameters.AddWithValue("@privi", privilege);

您可以在tbl_user_login.u_privilege

中使用MySqlDataReader.GetInt32语法获取while (MyReader.Read())的值
MyReader.GetInt32(3)

请注意,3的使用是因为MyReader.GetInt32需要基于零的索引参数,而tbl_user_login.u_privilege是查询的第四列。该值应分配给privilege变量,如下所示

privilege = MyReader.GetInt32(3)

另外,您应该参数化查询以避免SQL injection。这是执行上述更改后的完整代码

int privilege = 0;

try
{                
    //This is command class which will handle the query and connection object.
    string Query = "SELECT`tbl_user_login`.`u_id`,`tbl_user_login`.`u_username`,
             `tbl_user_login`.`u_password`,`tbl_user_login`.`u_privilege` 
             FROM `bcasdb`.`tbl_user_login`WHERE `tbl_user_login`.`u_username` = 
             @username AND `tbl_user_login`.`u_password` = @password;";
    MySqlConnection conn = 
                 new MySqlConnection(BCASApp.DataModel.DB_CON.connection);
    MySqlCommand cmd = new MySqlCommand(Query, conn);
    cmd.Parameters.AddWithValue("@username", username);
    cmd.Parameters.AddWithValue("@password", password);
    MySqlDataReader MyReader;
    conn.Open();
    MyReader = cmd.ExecuteReader();
      // Here our query will be executed and data saved into the database.

    if (MyReader.HasRows && this.Frame != null)
    {
        while (MyReader.Read())
        {
            privilege = MyReader.GetInt32(3)

            if (privilege == 1)
            {
                DisplayMsgBox("click ok to open the admin page ", "OK");
            }
            if (privilege == 2)
            {
                DisplayMsgBox("click ok to open the staff page ", "OK");
            }
            else
            {
                DisplayMsgBox("privilege 0", "ok");
            }   
        }
    }                
    else
    {
        DisplayMsgBox("sucess else", "ok");
    }

    conn.Close();
}
catch (Exception )
{
    DisplayMsgBox("sucess catch", "ok");
}