我发现这个网站在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;
}
}
}
}
答案 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
}
如果您在退货时设置了断点,则可以检查userCount
和isSuccess
。您还可以检查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);
}