1

C# でアクセス データベースを使用してログイン システムを作成しようとしています。データベースと User_ID および Password 列がありますが、なぜ機能しないのかわかりません。ご意見をお聞かせください。問題は、プログラムが 1 番目のユーザーのみをチェックすることですが、3 番目または 4 番目のユーザーを入力すると、次のメッセージが表示されます: user_ID とパスワードが正しいにもかかわらず、ユーザー名またはパスワードが正しくありません。コードは次のとおりです。

private void button1_Click(object sender, EventArgs e)
    {
        OleDbConnection connect = new OleDbConnection();
        connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Hodzic\Desktop\projekat shipping\Database files\Users.accdb";
        connect.Open();


        OleDbCommand command = new OleDbCommand();
        command.Connection = connect;
        command.CommandText = "select User_ID, Password from user_details";
        OleDbDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {

                if (textBox1.Text == reader[0].ToString() && textBox2.Text == reader[1].ToString())
                {


                    this.Hide();
                    Glavna2 g1 = new Glavna2();
                    g1.Show();
                    break;

                }

                else 
                {
                    MessageBox.Show("Your user ID or password is incorrect.");
                    this.Hide();
                    Sign_in g2 = new Sign_in();
                    g2.Show();
                    break;
                }


        }

        connect.Close();
    }

ありがとうございました。

4

1 に答える 1

1

ここに WHERE 句を追加する必要があります。

command.CommandText = "select User_ID, Password from user_details";

現在、リーダーの最初の結果を確認しているだけなので、それを行う場合 (これで問題ありません)、WHERE 句が必要です。

何かのようなもの:

command.CommandText = "select User_ID, Password from user_details WHERE User_ID = 'myusername'";

明らかに、それを連結する必要があり、多くの人は SQL インジェクションを心配する必要があると主張するでしょう (つまり、準備済みステートメントを意味します)。しかし、そこから始めて次に進みましょう。

さらに、SLaks が述べたように、パスワードをプレーン テキストで保存したくありません。そのため、アプリケーションにはかなりの微調整が必​​要ですが、データを取り戻すことから始めましょう。

次の研究:

  • Microsoft Access のプリペアド ステートメント。
  • パスワードハッシュ。
于 2012-12-24T18:06:39.120 に答える