如果密码恢复查询与 Linq 不匹配,如何 return 消息到 Sql

How to return a message if a Password Recovery query is not match Linq to Sql

我正在我的登录系统上使用密码恢复功能。

密码恢复表单的要求是验证三个值:username, security question and security answer。如果查询 returns a null 它将 return a messagebox。我的问题是,当三个值之一不正确时,它 return 是一个错误 "Sequence contains no elements"

我使用 try-catch 语句解决了这个问题,但我不想使用该方法,因为它很慢而且我的教授不推荐。

对于 try-catch 语句,您有任何替代方案吗?或者任何人有密码恢复功能的替代解决方案,其中必须首先验证三个值,然后 return 输入密码。

PS: 我的密码没有任何加密方法,因为我想先完成这项工作。

 var t = new DataClasses1DataContext();
 tbl_Register r = null;


 r = t.tbl_Registers.Single(p => p.u_username == textBox1.Text && p.u_secquestion == comboBox1.Text && p.u_secanswer == textBox2.Text);


 if (r == null) {
  MessageBox.Show("account is not found in the database");

 } else {
  MessageBox.Show("your password is:\t" + r.u_password);
 }

修改代码如下,因为很可能没有返回元素,结果为null。当前,您正在强制它读取不存在的 Single element,因此是一个例外。剩余的代码可以正常工作 post it

r = t.tbl_Registers.SingleOrDefault(p => p.u_username == textBox1.Text 
                                    && p.u_secquestion == comboBox1.Text 
                                    && p.u_secanswer == textBox2.Text);

.Single 更改为 .FirstOrDefault。我不知道你在数据库中存储了什么值。但是假设如果您要插入相似的记录,您将获得多个匹配的记录。在这种情况下,.single 将抛出异常。

.Single 应在您期望只有一条记录 returned 时使用。

.FirstOrDefault 用于查询可能 return 多于 0、1 或多条记录,但您只对其中的一条感兴趣。