1

我发现这个网站描述了一个非常简单的 LINQ to SQL 用户身份验证,如codesamplez.com

我在数据库中的数据如下所示

| id  | name | password |
+-----+------+----------+
| 1   | tic  | test     |
| 2   | tac  | test     |
| 3   | toe  | test     |

由于某种奇怪的原因,当我打电话时,数据没有像我预期的那样验证

 bool b  = IsValidUser("tic" , "test");

这返回FALSE,但任何时候我传递相同的用户名和密码组合

 bool b  = IsValidUser("tic" , "tic");

或者

 bool b  = IsValidUser("a" , "a");

或者

 bool b  = IsValidUser("b" , "b");

它回来了true

下面是与引用页面基本相同的代码。

public bool IsValidUser(string userName, string passWord)
{
    DataClasses1DataContext db = new DataClasses1DataContext();
    var users = from u in db.Users
                      where u.name == userName
                      && u.password == passWord
                      select u;

    return Enumerable.Count(users) > 0;
}

更新: 用户类:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Users")]
public partial class User
{
    private int _id;
    private string _name;
    private string _password;

    public User()
    {
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_id", DbType="Int NOT NULL")]
    public int id
    {
        get
        {
            return this._id;
        }
        set
        {
            if ((this._id != value))
            {
                this._id = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_name", DbType="NChar(10)")]
    public string name
    {
        get
        {
            return this._name;
        }
        set
        {
            if ((this._name != value))
            {
                this._name = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_password", DbType="NChar(10)")]
    public string password
    {
        get
        {
            return this._password;
        }
        set
        {
            if ((this._password != value))
            {
                this._password = value;
            }
        }
    }
}
4

4 回答 4

1

谢谢大家,现在所有非常有用的信息。这是我自己的错误,数据库中没有我期望的数据。我有 2 个数据库服务器,新数据没有复制到开发服务器。

于 2012-11-09T03:37:34.663 回答
0

不确定您的问题是什么,但这应该可以为您提供更多信息:

public bool IsValidUser(string userName, string passWord)
{

    DataClasses1DataContext db = new DataClasses1DataContext();
    db.Log = System.IO.StringWriter(New StringBuilder());

    var users = from u in db.Users
                where u.name == userName
                && u.password == passWord
                select u;

    int userCount = users.Count();
    bool isSuccess = userCount > 0;

    return isSuccess;   //Breakpoint here, check the contents of db.Log
}

如果你在 return 上设置一个断点,那么你可以检查userCountand isSuccess。您还可以查看db.Log运行了什么查询。

如果这不能解决您的问题,那么请在返回时使用这三个变量的值更新您的问题。

更新 我刚刚看到你的更新。听起来您引用了错误的IsValidUser方法。我会转到您调用它的位置,右键单击IsValidUser并选择“转到定义”以验证正在调用正确的方法。此外,验证您使用的是最新版本。

于 2012-11-09T03:22:12.113 回答
0

试试这个:

public bool IsValidUser(string userName, string passWord)
{
    using (var db = ...)
    {
        ...
        return users.Any();
    }
}
于 2012-11-09T03:24:35.510 回答
0

试试这个,

public bool IsValidUser(string userName, string passWord)
{
    DataClasses1DataContext db = new DataClasses1DataContext();
    return db.Users.Any(u => u.name == userName && u.password == passWord);
}
于 2012-11-09T03:28:40.953 回答