禁用不同用户登录的按钮

时间:2018-01-25 12:07:38

标签: c# sql-server-2014

首先,我将解释作为一个过程发生的事情;当管理员使用用户名和密码登录时,将授予访问权限,并且我使用了一个全局变体,该变体将用户名带入每个表单。希望这有助于解决我的问题。

我的登录代码工作正常:

try
{
    SqlCommand selectCommand = new SqlCommand(" Select * from Login_users where USER_NAME=@USER_NAM and PASSWORD=@PASSWOR", conn);
    selectCommand.Parameters.Add(new SqlParameter("USER_NAM", txtusername.Text.ToString()));
    selectCommand.Parameters.Add(new SqlParameter("PASSWOR", txtpassword.Text.ToString()));
    string UserType = null;
    SqlDataReader reader = selectCommand.ExecuteReader();
    bool rowfound = reader.HasRows;
    if (rowfound)
    {
        while (reader.Read())
        {
            UserType = reader[2].ToString().Trim();

            if (UserType == "ADMIN")
            {
                MessageBox.Show("Welcome ", "Admin Login", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Admin_StockControl frm = new Admin_StockControl();
                frm.Show();
                this.Hide();
            }
            else if (UserType == "STOCK_CON")
            {
                MessageBox.Show("Welcome ", "User Login", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Cashier frm = new Cashier();
                frm.Show();
                this.Hide();
            }
        }
    }
    else
    {
        MessageBox.Show(" Invalid User Or Password ", "Login ", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    reader.Close();
}

这是来自sql server数据库的我的Newuser表:带有示例

ID |    UserType   | User_Name | Password | Create_Date
..................................................
1       ADMIN          sam          123       5/5/17
2       STOCK_CON      kage         456       6/5/17

---------------我的问题----------------- ADMIN将能够从MainMenu创建新用户。通过单击测试按钮" Create_new user"。这是应该为STOCK_CON隐藏的按钮。在其他病房,我需要隐藏一个名为" bunifuFlatButton3"的按钮。为" STOCK_CON"并使其显示为" ADMIN"。

这是我的代码无法运行,我不知道它是如何工作的,但我尝试使用此代码:

private void Admin_Menu_Load(object sender, EventArgs e)
{

    SqlCommand selectCommand = new SqlCommand(" Select * from New_User where User_Name=@USER_ID and Password=@PASS", conn);
    bool rowfound = reader.HasRows;
    string UserType = null;
    SqlDataReader reader = selectCommand.ExecuteReader();
    if (rowfound)
    {
        while (reader.Read())
        {
            UserType = reader["User_Type"].ToString().Trim();

            if (UserType == "ADMIN")
            {
                bunifuFlatButton3.Visible = true;
            }
            else if (UserType == "STOCK_CON")
            {
                bunifuFlatButton3.Visible = false;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

可能是因为您正在调用"bool rowfound = reader.HasRows;",然后SqlDataReader reader = selectCommand.ExecuteReader();按照您不需要if(rowfound)的方式调用while(reader.Read())就足够了。 请做这样的事情:

    cmd.Parameters.Add("@USER_ID", SqlDbType.Int).value = "(somthing)";
    cmd.Parameters.Add("@PASS", SqlDbType.Int).value = "(somthing)";

    using (SqlDataReader sdr = cmd.ExecuteReader()) 
    {
        UserType = sdr.GetString(Column Index); //<= try not to type hard string this will return the string value of the column index you enter 

            if (UserType == "Administrator")
            {
                bunifuFlatButton3.Visible = true;
            }
            else if (UserType == "StockController")

            {
                bunifuFlatButton3.Visible = false;
            }
    }

无论如何尝试这个,让我知道它是否有效,因为我真的不明白你的代码的哪一部分“无法正常运行”

答案 1 :(得分:0)

克里斯提到

您在reader.HasRows;之前致电SqlDataReader reader = selectCommand.ExecuteReader();道具,就像错误所说:Cannot use local variable 'reader' before it is declared

试试这个

首先,您需要确保正确启动了连接对象(conn

 //intilize sql connection
 SqlConnection conn=// method that creates your connection string

 SqlCommand selectCommand = new SqlCommand(" Select * from New_User where  
  User_Name=@USER_ID and Password=@PASS", conn);   
  //add parametars if not added (i've added "sam" and "123" just for example, you should change this to strings that user types when login"
  selectCommand.Parametars.AddWithValue("@USER_ID","sam"); 
  selectCommand.Parametars.AddWithValue("@PASS","123");     
  string UserType = "";
  //make sure to open connection before calling ExecuteReader()
  conn.Open();
  SqlDataReader reader = selectCommand.ExecuteReader();
    if (reader.Read())
    {
            UserType = reader["User_Type"].ToString();  //you don't need Trim also
            if (UserType == "ADMIN")
            {
                bunifuFlatButton3.Visible = true;
            }
            else if (UserType == "STOCK_CON")
            {
                bunifuFlatButton3.Visible = false;
            }
     }

您不需要while循环,Read()方法如果没有行see here examples of how to use SqlDataReader则返回false。