DB一致チェック aspnet c#
解決したいこと
c#でデータベースと接続してログイン認証を行っていており、問題が発生したため質問させていただきました。データベースにユーザ1とユーザ2のID、PWがあるのですが、ユーザ1のIDとユーザ2のPWでも認証してしまい困っています。
該当するソースコード
string PW = TextBox2.Text;
bool a = false, b = false;
while (dataReader.Read())
{
if ((int)dataReader[0] == ID)
{
a = true;
}
if ((string)dataReader[8] == PW)
{
b = true;
break;
}
}
if (!a)
{
errorms.Text = "IDが存在しません";
topMessage.Visible = true;
}
else if (!b)
{
errorms1.Text = "パスワードが間違っています";
topMessage.Visible = true;
}
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
0
パスワードが一致したときだけwhileをbreakしていることが原因だと思います。
そのため、dataReaderの中にパスワードが存在すれば必ず認証してしまうのではないでしょうか。
逆に存在しなければ認証は通らないはずです。
こんな感じで解決するのでは。
動かしてないのでちょっと自信ないですが。。
`
string PW = TextBox2.Text;
bool a = false, b = false;
while (dataReader.Read())
{
a = a || (int)dataReader[0] == ID;
b = b || (string)dataReader[8] == PW;
}
if (!a)
{
errorms.Text = "IDが存在しません";
topMessage.Visible = true;
}
else if (a && !b)
{
errorms1.Text = "パスワードが間違っています";
topMessage.Visible = true;
}
`
1Like
c#でデータベースと接続してログイン認証を行っていており、問題が発生したため質問させていただきました。
可能でればデータベースから情報を取得する際、ID、PWを条件に追加するよう実装した方が良いと思います。
一応、ソースコードに手を加えるとすればこんな感じでしょうか(動作未確認)
該当するソースコード(抜粋)
while (dataReader.Read())
{
if ((int)dataReader[0] == ID)
{
a = true;
+ if ((string)dataReader[8] == PW)
+ {
+ b = true;
+ break;
+ }
}
- if ((string)dataReader[8] == PW)
- {
- b = true;
- break;
- }
}
1Like