C#如何向应用程序添加基本验证,以便在输入错误的用户名或密码时显示消息框
我在C#visual studio 2012中将一个sql数据库连接到我的windows窗体应用程序,该数据库包含一个表,其中包含用户名、密码和角色三列 表中包含用户名和密码的数据,“角色”列中还有两种用户类型,它们根据您的角色是管理员还是客户机来确定登录时指向的表单 我现在有了登录表单的代码,这样它可以在登录时检测用户是管理员还是客户端,但问题是我没有用户名和密码验证,这会显示一个消息框,详细说明用户输入错误信息的时间 请有人修改我的代码,以便它显示一个消息框,显示用户输入了错误的用户名或密码,如果他们尝试登录失败 下面是我的代码C#如何向应用程序添加基本验证,以便在输入错误的用户名或密码时显示消息框,c#,sql,.net,visual-studio,validation,C#,Sql,.net,Visual Studio,Validation,我在C#visual studio 2012中将一个sql数据库连接到我的windows窗体应用程序,该数据库包含一个表,其中包含用户名、密码和角色三列 表中包含用户名和密码的数据,“角色”列中还有两种用户类型,它们根据您的角色是管理员还是客户机来确定登录时指向的表单 我现在有了登录表单的代码,这样它可以在登录时检测用户是管理员还是客户端,但问题是我没有用户名和密码验证,这会显示一个消息框,详细说明用户输入错误信息的时间 请有人修改我的代码,以便它显示一个消息框,显示用户输入了错误的用户名或
private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "' ",con);
DataTable dt = new System.Data.DataTable();
sda.Fill(dt);
if(dt.Rows.Count == 1)
{
if (dt.Rows.Count == 1)
{
switch (dt.Rows[0]["Role"] as string)
{
case "Admin":
{
this.Hide();
AdminMenu ss = new AdminMenu();
ss.Show();
break;
}
case "Client":
{
this.Hide();
MenuForm mf = new MenuForm();
mf.Show();
break;
}
default:
{
// ... handle unexpected roles here...
break;
}
}
}
}
}
private void Login_Load(object sender, EventArgs e)
{
}
private void Login_FormClosing(object sender, FormClosingEventArgs e)
{
Application.ExitThread();
}
}
}
在这种情况下,你只需要设置一个其他条件
else
{
MessageBox.Show("Login Details are incorrect.");
}
if(dt.Rows.Count == 1)
{
if (dt.Rows.Count == 1)
{
private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "' ",con);
DataTable dt = new System.Data.DataTable();
sda.Fill(dt);
if(dt.Rows.Count == 1)
{
switch (dt.Rows[0]["Role"] as string)
{
case "Admin":
{
this.Hide();
AdminMenu ss = new AdminMenu();
ss.Show();
break;
}
case "Client":
{
this.Hide();
MenuForm mf = new MenuForm();
mf.Show();
break;
}
default:
{
MessageBox.Show("Please contact your administrator");
break;
}
}
}
else
{
MessageBox.Show("Login Details are incorrect.");
}
}
而且我也不明白,如果情况如此,你为什么要这么做
else
{
MessageBox.Show("Login Details are incorrect.");
}
if(dt.Rows.Count == 1)
{
if (dt.Rows.Count == 1)
{
private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "' ",con);
DataTable dt = new System.Data.DataTable();
sda.Fill(dt);
if(dt.Rows.Count == 1)
{
switch (dt.Rows[0]["Role"] as string)
{
case "Admin":
{
this.Hide();
AdminMenu ss = new AdminMenu();
ss.Show();
break;
}
case "Client":
{
this.Hide();
MenuForm mf = new MenuForm();
mf.Show();
break;
}
default:
{
MessageBox.Show("Please contact your administrator");
break;
}
}
}
else
{
MessageBox.Show("Login Details are incorrect.");
}
}
而只有第一个能满足你的目的
所以代码看起来像这样
else
{
MessageBox.Show("Login Details are incorrect.");
}
if(dt.Rows.Count == 1)
{
if (dt.Rows.Count == 1)
{
private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "' ",con);
DataTable dt = new System.Data.DataTable();
sda.Fill(dt);
if(dt.Rows.Count == 1)
{
switch (dt.Rows[0]["Role"] as string)
{
case "Admin":
{
this.Hide();
AdminMenu ss = new AdminMenu();
ss.Show();
break;
}
case "Client":
{
this.Hide();
MenuForm mf = new MenuForm();
mf.Show();
break;
}
default:
{
MessageBox.Show("Please contact your administrator");
break;
}
}
}
else
{
MessageBox.Show("Login Details are incorrect.");
}
}
现在,如果它既不是客户机也不是管理员,则可以显示MessageBox
当然,您的代码必须是如果(dt.Rows.Count==1)检查是否返回了记录,请使用密码
或role='Admin
尝试该代码。如果登录名/密码不正确,则不会返回任何行。因此,如果表达式不正确,您需要的代码将进入else部分。在此之后,您需要考虑另一种可能的状态会发生什么:如果返回的行超过一行,您还需要保护代码不受SQL注入的影响。目前,您的代码存在安全风险。它很容易被黑客攻击来重置所有密码。如果我把它放进textbox1:”;更新登录设置密码=“”--代码>我尝试了你的建议Mohit Shrivastava,但如果我键入了错误的用户名或密码,则不会发生任何情况,我只是停留在登录表单上,但没有显示任何消息框。只是利用你的一些建议了解了如何做谢谢你的回答。