用户存在检查在LINQ to SQL中不起作用

时间:2012-11-09 03:02:33

标签: c# .net linq linq-to-sql

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

我在数据库中的数据看起来像这样

| 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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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
}

如果您在退货时设置了断点,则可以检查userCountisSuccess。您还可以检查db.Log以查看运行的查询。

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

更新我刚看到您的更新。听起来你引用了错误的IsValidUser方法。我会去你所在的地方,右键单击IsValidUser并选择“Go To Definition”以验证是否正在调用正确的方法。另外,请验证您使用的是最新版本。

答案 2 :(得分:0)

试试这个:

public bool IsValidUser(string userName, string passWord)
{
    using (var db = ...)
    {
        ...
        return users.Any();
    }
}

答案 3 :(得分:0)

试试这个,

public bool IsValidUser(string userName, string passWord)
{
    DataClasses1DataContext db = new DataClasses1DataContext();
    return db.Users.Any(u => u.name == userName && u.password == passWord);
}