2016-08-16 4 views
0

ログインシステムでパスワード回復機能を使用しています。パスワード回復クエリがSqlのLinqと一致しない場合にメッセージを返す方法

パスワード回復フォームの要件は、3つの値:username, security question and security answerを認証することでした。クエリでnullが返された場合は、messageboxが返されます。私の問題は、3つの値のうちの1つが真でない場合、エラー"Sequence contains no elements"を返します。

私はtry-catchというステートメントを使用していますが、この問題はソートされましたが、遅くて私の教授には推奨されないため、このメソッドを使用したくありません。

try-catchステートメントの代替手段がありますか、またはパスワードリカバリ機能の代替ソリューションがあります。パスワードを返す前に3つの値を最初に検証する必要があります。

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); 
} 
+0

Single()の代わりに.FirstOrDefault()を試しましたか? –

+1

(技術的に正しい)すべての回答を脇に - .NETスタックを使用している場合は、[認証プロバイダ](https://msdn.microsoft.com/en-us/library/eeyk640h.aspx)を使用してくださいそれと。それはあなたが最初から構築しようとしているものすべて(セキュリティの質問などを含む)を持っています。 – Filburt

答えて

1

変更.FirstOrDefault.Single細かいポストに動作します。私はあなたがデータベースに保存している値がわからない。類似のレコードを挿入している場合は、複数のレコードが一致するとします。その場合、.singleは例外をスローします。

.Singleは、1つだけのレコードが返されると予想される場合に使用する必要があります。

.FirstOrDefaultは、クエリで0,1,1つ以上のレコードが返される場合に使用されますが、それらのレコードだけに興味がある場合に使用します。

+0

'Single'はここでは問題ではありませんが、' default null'を処理していないことが問題です。 –

+0

@MrinalKambojは実際にはいです。 「シングル」が問題になるかもしれません。 'Single'は複数のレコードが見つかった場合にも例外を与えます。はい、nullの場合でも例外が発生します。同様のレコードを使用している場合、idkから 'SingleOrDefault'の代わりに' FirstOrDefault'を提案しました。それは学校プロジェクトなので、私はOPが複数の類似のレコードを挿入し、順番に 'SingleOrDefault'に問題を引き起こすと思います。 –

+0

SingleとFirstOrDefaultのことについて私に明確にしていただきありがとうございます。 –

1

それはかなり可能であるため、返されたどの要素がありません、以下のようなコードを変更し、結果はnullです。現在のところ、存在しないSingle elementを読み込まなければならないので、例外です。残りのコードは、それ

r = t.tbl_Registers.SingleOrDefault(p => p.u_username == textBox1.Text 
            && p.u_secquestion == comboBox1.Text 
            && p.u_secanswer == textBox2.Text); 
関連する問題