SqlDataReader ["属性"]。ToString不起作用

时间:2016-10-13 08:07:14

标签: c#

实际上,我有这部分代码来比较用户输入的密码是否与SQL Server数据库中输入的密码相同:

if (drUtilisateur["MotDePasse"].ToString() == strMotDePasse)

我不明白为什么drUtilisateur["MotDePasse"].ToString()无法正常工作。

你有什么解决方案吗?

首次实现:

这是我的完整代码,其中上面的部分代码位于:

private bool Authentifier(string strNomUtilisateur, string strMotDePasse)
{
    bool bOk = false;
    // Cryptage du mot de passe
    strMotDePasse = FormsAuthentication.HashPasswordForStoringInConfigFile(strMotDePasse, "MD5");
    // Création d'une connexion SGBD
    SqlConnection oConnexion = new SqlConnection(Convert.ToString(ConfigurationManager.ConnectionStrings["SaisieHeuresConnectionString"]));
    // Définition de la requête à exécuter
    SqlCommand oCommand = new SqlCommand("SELECT * FROM Utilisateurs WHERE NomUtilisateur='" + strNomUtilisateur + "'", oConnexion);
    try
    {
        // Ouverture de la connexion et exécution de la requête
        oConnexion.Open();
        SqlDataReader drUtilisateur = oCommand.ExecuteReader();
        // Parcours de la liste des utilisateurs
        while (drUtilisateur.Read())
        {
            if (drUtilisateur["MotDePasse"].ToString().Equals(strMotDePasse))
            {
                bOk = true;
                break;
            }
        }
    }
    catch
    {
        bOk = false;
    }
    oConnexion.Close();
    return bOk;
}

我将我的密码哈希到MD5中(因为它是向我询问的哈希方法)。

2 个答案:

答案 0 :(得分:0)

尝试

if (drUtilisateur["MotDePasse"] != DBNull.Value) {
    drUtilisateur["MotDePasse"].ToString().equals(strMotDePasse)
} else {
    //null
}

注意:请勿以明文形式存储密码......

答案 1 :(得分:0)

我找到了答案。

实际上,我的计划有效。

异常是当用户输入密码时,将程序哈希到MD5;字母是大写的,而我在我的数据库中以小写形式输入。

因此,当您在代码中比较MD5中的两个密码时,请注意这个案例。