首先,我将解释作为一个过程发生的事情;当管理员使用用户名和密码登录时,将授予访问权限,并且我使用了一个全局变体,该变体将用户名带入每个表单。希望这有助于解决我的问题。
我的登录代码工作正常:
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;
}
}
}
}
答案 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。