DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#のプログラムの質問

分類:[.NET]

・データ Access2000
ユーザID | パスワード
---------------------
1000 | 0001
1001 | 0002
1002 | 0002
1003 | 0004

・入力したユーザIDとパスワードが一致したならMessageBoxに[OK]を表示
それ以外は[入力が違います]を表示するにはどうしたらいいのでしょうか?
textBox1にユーザID
textBox2にパスワードを入力するようにしてあります。
『レコードを抽出してユーザIDとパスワードのレコード
が一致したならMessageBoxに[OK]を表示』というやり方でやりたいんですが・・・。
自分で↓のように作ってみたんですがうまくいかなくて・・。
誰か教えてくれませんか?

=========ソース==========================================================
//実行ボタン
private void button1_Click(object sender, System.EventArgs e)
{

//レコードを抽出

dataView1.RowFilter = "ユーザID='" + textBox1.Text + "'";
dataView2.RowFilter = "パスワード='" + textBox2.Text + "'";

if(textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("入力が違います1");
}
else
{
if(dataView1.ToString() == dataView2.ToString() )
{
MessageBox.Show("OK");
}

else
{
MessageBox.Show("入力が違います2");
}
}
}

private void Form1_Load(object sender, System.EventArgs e)
{
odaPas.Fill(pasSet1,"T_パスワード"); //データを読み込む
}
====================================================================
■No469に返信(AKATSUKIさんの記事)
> 『レコードを抽出してユーザIDとパスワードのレコード
>  が一致したならMessageBoxに[OK]を表示』というやり方でやりたいんですが・・・。

.ToString()で比較しているのは絶対変。
DataViewを2つ使いまわしているのも複雑にしているだけ。
(同じパスワードの人がいたら正しく認証できないなどバグの温床)

  dataView1.RowFilter = "ユーザID='" + textBox1.Text 
                      + "' and パスワード='" + textBox2.Text + "'";
  if (dataView1.Count == 1) 
  {
    MessageBox.Show("OK");
  }

で、どうでしょうか?

ただ、、、
ユーザチェックするのに、DataAdapter,DataSet,DataView
を総動員するのも、何か大層過ぎる印象を受けます。
Connectionだけで、以下のようにコーディングすることも出来ます。

  private bool IsCertificatedUser(string userID, string pass) {
    string sql = "select count(*) from T_パスワード"
               + " where ユーザID ='%USERID%' and パスワード = '%PASS%'";
    sql = sql.Replace("%USERID%", userID);
    sql = sql.Replace("%PASS%", pass);

    OleDbCommand cmd = m_oleDbConnection.CreateCommand();
    cmd.CommandText = sql;

    return ((int)cmd.ExecuteScalar() == 1);
  }
>>ピラルク
おかげで解決しました
どうもありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板