首先在这里发帖,首先,感谢这个网站的存在,因为它到目前为止帮助了我很多。
现在我正在制作一个需要用户登录的项目(C#)。配置文件存储在SQL基础上,我需要检查凭据(用户/通行证)是否正确以允许登录。
我对SQL很少了解,请稍等我的错误。
表单工作得很好。什么不起作用是我的数据库上的数据检查。因此,当我按下登录时,表单调用以下函数:
public bool ValidacaoLogin(string user,string pass)
cn.Open();
cmd = new SqlCommand("select * from BDPerfil left join BDPerfilTecnico on BDPerfil.USER = BDPerfilTecnico.USER where BDPerfil.USER = @USER;", cn);
cmd = new SqlCommand("select * from BDPerfil where NIF = '" + user + "' AND PASSWORD = '" + pass + "';", cn);
cmd.Parameters.AddWithValue("@USER", user);
cmd.Parameters.AddWithValue("@PASSWORD", pass);
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
if ("@USER" == user)
{
if ("@PASSWORD" == pass)
dr.Close();
cn.Close();
return true;
}
}
}
dr.Close();
cn.Close();
return false;
}
我有2个表来存储不同的配置文件:BDPerfilTecnico和BDPerfilAssist所以我希望我的程序检查两者(通过连接)虽然现在我不需要使用BDPerfilAssist,因为我的所有测试配置文件都在BDPerfilTecnico上。
帮助? 提前谢谢。
答案 0 :(得分:0)
至少,您需要查询中的参数。我希望:
cmd = new SqlCommand("select * from BDPerfil where NIF = @USER AND PASSWORD = @PASSWORD'", cn);
您正在使用查询参数的良好路径。你只需要在查询中使用它们。
注意:代码中可能还有其他问题。
答案 1 :(得分:0)
返回的结果将在dr变量中,并取决于表中的列。而不是*你应该列出你想要的表列,即用户,密码。然后你可以使用dr变量来获取这些值,使用dr.getString(0)这样的语句获取用户,使用dr.getString(1)获取密码。代码中的查询不会更改变量user和password。文字字符串“@user”和“@password”也不会出现在查询中,所以我不知道为什么要与它们进行比较。相反,你想做类似的事情。如果(dr.getString(0)== user)
请加密数据库中的密码。您可以加密用户输入的内容并将加密密码与加密密码进行比较。
祝你好运