我有这个功能:
//change user password
void chgPass(string username, string old_password, string new_password)
{
var result = (from l in this.dbLogin.SLN
where l.user_id.Equals(username)
where l.password.Equals(old_password)
select l).First();
result.password= new_password;
dbLogin.SubmitChanges();
}
我称之为:
this.loginClient.chgPassAsync(user, old_password, new_password);
有人可以告诉我为什么在我运行这个时没有变化...在debuge模式中我可以看到密码字段被更改,但是当我查看db密码时没有更改。
答案 0 :(得分:2)
您的SLN
表是否有主键?如果没有,那么尝试设置一个,根据我的测试LINQ不会更新一个实体,而不是在它所属的表中有PK
请检查this
答案 1 :(得分:1)
Wolfy - 我首先启动SQL事件探查器以确定是否将SQL Update语句发送到目标SQL Server。如果是,我会检查以确保您没有活动,在更高级别,未提交或正在回滚的事务。最后,如果前两个问题没有解决问题,请确保您的实体发生实际变化。
我假设First()方法没有抛出异常,如果没有找到行就会发生异常。所以你的查询必须至少返回一行数据。
小心这个电话:
this.loginClient.chgPassAsync(user, old, new);
'new'是C#关键字。
答案 2 :(得分:1)
之前我已经回答了这样的问题,但是我找不到了,所以我再次在这里重复我的回答,
如果您每次运行应用程序时都将数据库文件添加到解决方案中,那么它的副本将转到您的Debug文件夹,并且您更改的文件不是原始文件,
另一个机会是您的密码数据类型为Binary
,由于列数据类型和更新二进制数据中存在的问题,更新将失败
答案 3 :(得分:0)
star_password
中的where l.password.Equals(star_password)
来自何处?
不应该是old_password
吗?
此外new
是c#中的保留字,因此您应该使用其他内容
在this.loginClient.chgPassAsync(user, old, new);
答案 4 :(得分:0)
你的方法看起来很奇怪。什么是usernamene
和star_password
?
应该更像这样:
void chgPass(string username, string old_password, string new_password)
{
var result = this.dbLogin.SLN.FirstOrDefault(l => l.user_id == username
&& l.password == old_password);
if(result == null)
throw new ArgumentException("User not found", "username");
result.password = new_password;
this.dbLogin.SubmitChanges();
}