始终返回null

时间:2015-11-03 14:32:33

标签: c# asp.net

由于某种原因,我在这个查询中并不总是为空,我不知道为什么我已经进行了调查,我没有得到任何值,但我的数据网格很好,并且显示用户。

public Boolean VerifyPassword(string userName, string password)
{
    //The ".FirstOrDefault()" method will return either the first matched
    //result or null
    var myUser = soccerEntities.Users
        .FirstOrDefault(u => u.UserName == userName
                     && u.password == password);

    if (myUser == null)    //User was not found
    {
        //Proceed with your login process...
        return false;
    }
    else    //User was  found
    {

        return true;        
        //Do something to let them know that their credentials were not valid
    }
}

这是我的足球运动员

private soccerEntities _soccerEntities;
protected soccerEntities soccerEntities
{
    get
    {
        if (_soccerEntities == null)
        {
            try
            {
                _soccerEntities = new soccerEntities();
            }
            catch (Exception ex)
            {
                throw new EntityContextException("Soccer Entities Could not be created", ex);
            }
        }

        return _soccerEntities;
    }
}

3 个答案:

答案 0 :(得分:4)

您检索的数据很可能与给定的用户名和密码字符串不匹配。

也许:

  • 没有数据;
  • 检索到的数据中有空格;
  • 数据已加密,您使用的字符串未加密,因此无法匹配。

没有信息,我能给出的唯一建议就是调整你比较字符串的方式。

答案 1 :(得分:1)

从问题看来,我认为该方法始终以false结尾,因此:

<VirtualHost *:80>
    ServerName site.dev
    ServerAlias www.site.dev

    DocumentRoot /Applications/MAMP/htdocs/bo/web
    <Directory /Applications/MAMP/htdocs/bo/web>
        AllowOverride All
        Order Allow,Deny
        Allow from All
    </Directory>
</VirtualHost>

将myUser设置为null。

如果是这种情况,那么它指向数据的方向而不是逻辑。因此,我强烈建议做以下事情: 1.)当你到达那条线时,检查soccerEntities.Users是否被填充 2.)检查是否有任何填充字符附加(例如,如果数据库表coloumn是char类型而不是varchar,则为空白。)

另外一件事是你应该使用.Equals而不是==。

例如,如果您想确保没有空白“污染”结果,您可以测试以下内容并稍后删除.Trim()vom userName.Trim()和password.Trim():

php app/console assetic:dump

但正如所说的那样,你所说的所有内容都指向一个数据问题,所以你拥有的数据都是空的,或者不是你想要的(比如前导或尾随空白)

如果问题是大字母和小字母,你应该将它们转换为一种字母,例如使用u.password.Trim()。ToUpper()将所有字母转换为大字的等效字母。

编辑:值得注意: 上述内容仅在数据库和uername,password不为null时才有效。然后.Trim()失败并且u.UserName.Equals(也失败。因此,如果那可能是这种情况,你必须确保只有当它不为null时才调用u.Username.Equals

  var myUser = soccerEntities.Users
        .FirstOrDefault(u => u.UserName == userName
                     && u.password == password);

u.password也是如此。如果userName和password可以为null,我会在方法的开头将它们设置为String.Empty,否则会变得非常复杂。

答案 2 :(得分:0)

我会用:

public Boolean VerifyPassword(string userName, string password)
{
    return soccerEntities.Users
        .Any(u => u.UserName == userName
                     && u.password == password);
}