0

ソルトとハッシュの議論を脇に置きます。そして、答えがわかっている場合にのみ返信してください。

ユーザーがログインおよびログアウト時に日付と時刻を含むクレデンシャルを自動的に記録するメソッドを作成しようとしています。

私は2つの問題があります

問題1-ログインとログアウトのためだけの簡単なメソッドを作成しました。日付と時刻のコードを含めたとき、これらはすべてのユーザーのために記録および保存されていることに気づきました。現在、2人のユーザーがいます。したがって、1人のユーザーがログインした場合、日付と時刻が記録され、他のユーザーのスタンプが押されます。

問題2-2番目の問題は、UpdateコマンドパラメーターがSelectと同じメソッドである場合に、サブジェクトヘッダーにエラーメッセージが表示されることです。

誰かが私を助けることができれば、私は両方の問題に感謝するでしょう。うまくいけば、それはマイナーな問題にすぎませんか?日時を省略した場合は、マルチログイン機能を教えていただければ幸いです。

アクセス2003〜2つのテーブル。表1-名前付きLoginTable表2-名前付きLoginLogTable

LoginTable

FieldName DataType

UserName   Text
Password   Text

LoginLogTable
FieldName     DataType
UserNameID    Text
UserName      Text
LoggedIn      Date/Time
LoggedInTime  Date/Time     



 private void btnLogin_Click(object sender, EventArgs e)
 {
    using (var command = myCon.CreateCommand())
        {
            command.CommandText = "select UserName, Password from LoginTable where WHERE STRCOMP(UserName, @UserName,0) = 0 AND STRCOMP(Password, @Password,0)=0";
           command.Parameters.AddWithValue("UserName", (txtUserName.Text));
            command.Parameters.AddWithValue("Password", (txtPassword.Text));
            myCon.Open();

            var reader = command.ExecuteReader();
            {
                if (reader.HasRows)
                {
                    MessageBox.Show("Login Successful");
                    Form2 frm = new Form2();
                    frm.Show();
                    while (reader.Read())
                    {
                      txtUserName.Text = reader["UserName"].ToString();
                      txtPassword.Text = reader["Password"].ToString();
                    }

                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = myCon;

                     cmd.CommandText = "UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ?";
                      cmd.Parameters.AddWithValue("@LoggedInDate", DateTime.Now.ToShortDateString());
                    cmd.Parameters.AddWithValue("@LoggedInTime", DateTime.Now.ToString("HH:mm"));
                    cmd.ExecuteNonQuery();
                    myCon.Close();

                }
            else MessageBox.Show("Login Falied");
            }

        }
           myCon.Close();
           myCon.Close();

}

4

2 に答える 2

1

クエリに条件がないupdateため、テーブル内のすべてのレコードが更新されます。単一のレコードのみを更新する条件を追加します。私はあなたがあなたのテーブルに何を持っているかわかりませんが、このようなものです:

cmd.CommandText = "UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ? where UserName = ?";
cmd.Parameters.AddWithValue("LoggedInDate", DateTime.Now.ToShortDateString());
cmd.Parameters.AddWithValue("LoggedInTime", DateTime.Now.ToString("HH:mm"));
cmd.Parameters.AddWithValue("UserName", txtUserName.Text);

2番目のコマンドを実行する前に、最初のデータリーダーとコマンドを閉じて破棄する必要があります。

于 2013-03-24T18:45:25.530 に答える
0

LoginLogTableにUserName列が必要で、テーブルを次のように更新するとします。

UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ? WHERE UserName = 'YourUserName'.

そして第二に、私はあなたがここに読者を必要としないと信じています。Readerの代わりにExecuteScalarを使用できます。リーダーが開いた状態であるため、2番目のコマンドは実行できません。

于 2013-03-24T18:43:25.007 に答える