Я просто хочу знать, как показать забытый пароль, используя другие данные из базы данных MSAccess - PullRequest
0 голосов
/ 27 марта 2019
private void RevealForgetPass_Click(object sender, EventArgs e)
        {

            string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Users/rallf/Documents/dctcaccount.mdb";
            OleDbConnection cn = new OleDbConnection(connectString);
            cn.Open();
            string selectString = "select * from tbl_account where [Username]=@user and [Secret_Question]=@sq and [Secret_Answer]=@sa and [Pin]=@pin";
            OleDbCommand cmd = new OleDbCommand(selectString, cn);
            cmd.Parameters.Add(new OleDbParameter("@user", txtbox_username.Text.ToLower()));
            cmd.Parameters.Add(new OleDbParameter("@sq", cmbox_secquestion.Text));
            cmd.Parameters.Add(new OleDbParameter("@sa", txtbox_secretans.Text));
            cmd.Parameters.Add(new OleDbParameter("@pin", txtbox_pin.Text));
            cmd.CommandText = selectString;
            OleDbDataReader reader = cmd.ExecuteReader();



             int count = 0;
             while (reader.Read())
             {
                 count = count + 1;



             }
             if (count == 1)
             {

                 panel2.Visible = true;
                 lbl_username.Text = reader["Username"].ToString(); 

Вот где ошибка, когда я запускаю программу (на панели отобразится надпись «привет» пользователю, а затем будет показан его / ее забытый проход.)

lbl_password.Text = reader["Password"].ToString();
             }
             else
             {
                 MessageBox.Show("Invalid Account!");
                 cn.Close();
             }
             }

ошибка говорит это:

Необработанное исключение типа 'System.InvalidOperationException' произошла в System.Data.dll Дополнительная информация: Нет данных для строка / столбец.

Я пробовал разные способы включения reader.GetString(reader.GetOrdinal(" ")) Они тоже не работают.

1 Ответ

0 голосов
/ 28 марта 2019

Не хранить пароли! Просто храните их хэш!

Затем позвольте пользователю создать новый пароль, если необходимо.

Чтобы решить вашу ошибку: Вы должны получить данные внутри цикла while (reader.Read()). После того, как цикл слишком поздний, вы достигли конца OleDbDataReader и не можете вернуться назад (только вперед).

int count = 0;
while (reader.Read())
    {
         count = count + 1;
         string username = reader.item["Username"].ToString();
         string password = reader.item["Password"].ToString();
    }
...