我设计了一个登录表单,并使用了combobox1,textbox1,textbox2和button。当我在组合框中选择“Admin”时,如果用户名和密码正确,则在textbox1和textbox2中的用户名和密码将从数据库的Admin表中检查,然后显示Admin Form。
我该怎么做?
代码:
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedText == "Admin")
{
SqlCommand cmd = new SqlCommand("select * from Admin");
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
textBox1.Text = dr["Username"].ToString();
textBox2.Text = dr["Password"].ToString();
Admin ad = new Admin();
ad.ShowDialog();
}
}
}
答案 0 :(得分:0)
根据您的代码,您实际上是在尝试根据数据库中的值设置textbox1
和textbox2
的值。我猜你实际上是在试图检查它们是否相等?
如果是这样,你最好修改你的查询,这样它只会根据用户输入的详细信息从Admin返回详细信息,而不是从admin表中返回所有内容。
另外,根据Alfie Goodacre的回答,你想要SelectedItem
。
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem.ToString() == "Admin")
{
SqlCommand cmd = new SqlCommand("select *
from Admin
where Username = @UN and
Password = @PW");
var unParam = new SqlParameter("@UN", SqlDbType.VarChar);
unParam.Value = textbox1.text;
cmd.Parameters.Add(unParam);
var pwParam = new SqlParameter("@PW", SqlDbType.VarChar);
pwParam.Value = textbox2.text;
cmd.Parameters.Add(pwParam);
SqlDataReader dr = cmd.ExecuteReader();
//check if any data has returned based on the user inputs
if (dr.HasRows)
{
if (dr.Read())
{
Admin ad = new Admin(); ad.ShowDialog();
}
}
}
}
答案 1 :(得分:-1)
您不希望选中的文字作为支票,您需要SelectedItem
- 这是因为Button_Click
事件会从框中删除焦点,从而有效地取消选中其中的任何文字。
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem.ToString() == "Admin")
{
SqlCommand cmd = new SqlCommand("select * from Admin");
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
textBox1.Text = dr["Username"].ToString();
textBox2.Text = dr["Password"].ToString();
Admin ad = new Admin(); ad.ShowDialog();
}
}
}