我有DB Sid和密码,它包含Sid = senan和密码= pass1234 当我将此详细信息输入我的登录屏幕时,我总是收到消息消息框
SqlDataAdapter cmd = new SqlDataAdapter("select Count(*) from [user] where Sid=' " + textBox1.Text + " ' and password='" + textBox2.Text + "'", cnn);
DataTable dt = new DataTable();
cmd.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
MessageBox.Show("pass");
else
MessageBox.Show("fail");
答案 0 :(得分:0)
错误源于一个简单的拼写错误。您为Sid
条件传递的值添加了空格
但是,您的查询应该以这种方式重写
string cmdText = "select Count(*) from [user] where Sid=@sid and password=@pwd";
SqlCommand cmd = new SqlCommand(cmdText, cnn)
cmd.Parameters.AddWithValue("@sid", textBox1.Text);
cmd.Parameters.AddWithValue("@pwd", textBox2.Text);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
MessageBox.Show("pass");
else
MessageBox.Show("fail");
此方法使用参数化查询来避免Sql Injection,并直接使用SqlCommand而不构建SqlDataAdapter
和DataTable
。当您需要仅检索单行的第一列或调用标量T-SQL函数(COUNT()
作为旁注,请记住,在数据库中以明文形式存储密码是一个很大的安全问题。有权访问数据库的人将能够读取每个用户的密码。密码应为stored as a computed hash,并检查用户输入数据上的重复哈希算法。