1 回答
TA贡献1998条经验 获得超6个赞
在这里,您可以进行类似于您的实现的内容:
private void loginbtn_Click(object sender, EventArgs e)
{
var conString = "ReplaceWithMyConnectionString";
string userRole = null;
using (var con = new SqlConnection(conString))
{
con.Open();
var cm = con.CreateCommand();
cm.CommandType = System.Data.CommandType.Text;
cm.CommandText = "SELECT TOP 1 Role FROM User_Table WHERE eb_number = @eb_number AND and Password = @Password";
cm.Parameters.Add(new SqlParameter("@eb_number", System.Data.SqlDbType.VarChar, 50) { Value = usernametxt.Text });
cm.Parameters.Add(new SqlParameter("@Password", System.Data.SqlDbType.VarChar, 50) { Value = textBox1.Text });
using (var reader = cm.ExecuteReader(System.Data.CommandBehavior.SingleRow))
{
if (reader.Read())
{
userRole = reader["Role"].ToString();
}
}
}
if (userRole != null)
{
this.Hide();
Main ss = new Main(usernametxt.Text, userRole); //usernametxt is passed in to prevent error
ss.Show();
MessageBox.Show("Logged in sucessfully");
}
else
{
MessageBox.Show("Incorrect Username/Password Combination. Try Again");
}
}
有几件事情是不同的,我将解释它们背后的原因:
我用参数替换了您在SQL上执行的字符串串联。这是为了避免SQL注入。您是否想知道如果用户在用户名或密码文本框中输入字符会发生什么?还有更多,请研究这个主题。
'
我正在语句中实例化您的连接。这将确保当我们完成数据库工作时,您的连接被关闭(处置)。
using
用更精简的 SqlCommand/SqlDataReader 类替换了 DataAdapter/DataTable。
我以一种可以尽快关闭连接的方式分离了逻辑,并且不会被对MessageBox.Show()的调用中断。
另外,非常重要的一点是,切勿将密码作为明文存储在数据库中,请对哈希函数以及为什么应该在此上下文中使用它们进行一些研究。
我希望这有帮助。
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报