如果密码恢复查询与 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 或多条记录,但您只对其中的一条感兴趣。
我正在我的登录系统上使用密码恢复功能。
密码恢复表单的要求是验证三个值: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 或多条记录,但您只对其中的一条感兴趣。