我修改了我之前编写的代码,但仍无法找到缺陷 .... 我正在尝试使用DB的列名作为代码中的参数来检查登录。 我提供的If语句似乎不起作用,因为代码总是显示不成功的登录,而参数能够返回控制台上的数据库记录..(如下面的链接所示)。 然而,控件不会进入 if语句......
private void button1_Click(object sender, EventArgs e)
{
String s1 = textBox1.Text;
String s2 = textBox2.Text;
SqlConnection cnn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=register;Integrated Security=True");
String sql = ("select Userid,Password from reg where Userid='" + s1 + "' and Password='" + s2 + "' ");
cnn.Open();
String userid="";
String password="";
SqlCommand cmd = new SqlCommand(sql,cnn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while(reader.Read())
{
userid = reader.GetString(0);
password = reader.GetString(1);
Console.WriteLine(userid);
Console.WriteLine(password);
}
if((s1.Equals(userid)) && (s2.Equals(password)))
{
MessageBox.Show("LOGIN SUCCESSFULLY DONE>>");
}
else
{
MessageBox.Show("LOGIN UNSUCCESSFUL ....");
}
}
[数据库条目Output
答案 0 :(得分:0)
您需要在AND
子句中使用WHERE
而不是逗号:
String sql=("select userid,password from reg where Userid='"+s1+"' and Password='"+s2+"' ")
^^^
然后您需要执行查询:
string userid, password;
using(var cmd = new SqlCommand(sql,cnn))
{
cnn.Open();
using (var reader = cmd.ExecuteReader())
{
reader.Read();
userid = reader.GetString(0);
password = reader.GetString(1);
}
}
然后您使用if
声明中的值:
if ((s1.Equals(userid)) && (s2.Equals(password)))
答案 1 :(得分:0)
我写的代码实际上没有任何缺陷。这里的问题是数据输入过程中的运行时间。还在考虑跟踪空格,因为字符串无法成功匹配。因此解决了问题我使用了trim()函数。
这是我所做的改变 -
String s1 = textBox1.Text.Trim();
String s2 = textBox2.Text.Trim();
//And further in the while loop
userid = reader.GetString(0).Trim();
password = reader.GetString(1).Trim();