2015-01-28 1 views
0

Я пробовал несколько разных способов обновить столбец после проверки пользователя и пароля в таблице, хотя мне не повезло обновить столбец Last_login с или без UserId (это мой первичный ключ), если я не буду изменять имя пользователя в качестве первичного ключа, мне не удалось войти в систему, не включая команду Last_login sql, хотя я бы предпочел включить ее.C# логин с последним полем для регистрации обновлен

private void Connect() 
     { 
      SqlConnection connection = new SqlConnection(); 
      //Imports the methods from Custom Security class 
      Custom_Security security = new Custom_Security(); 

      string userid = ""; 
      string time = ""; 

      try 
      { 
       connection.ConnectionString = connectionPath; 
       connection.Open(); 

       SqlCommand cmd = new SqlCommand("SELECT * FROM Logins WHERE Username = @Username (UserId, Password) VALUES (@UserID, @Password)"); 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = connection; 

       cmd.Parameters.AddWithValue("@Username", txtuser.Text); 
       cmd.Parameters.AddWithValue("@Password", security.AES(security.Hashstring(txtpass.Text))); 
       cmd.Parameters.AddWithValue("@UserId", userid); 
       cmd.ExecuteNonQuery(); 

       SqlDataReader dr = cmd.ExecuteReader(); 
       if (dr.Read()) 
       { 
        DialogResult dlgResult; 
        dlgResult = MessageBox.Show(
          "Welcome: " + txtuser.Text, 
          "Login sucessful", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Information, 
          MessageBoxDefaultButton.Button1); 

        //Closes the data reader 
        dr.Close(); 

        //Clears previous SQL command 
        cmd.Parameters.Clear(); 

        DateTime timeNow = DateTime.UtcNow; 
        time = timeNow.ToShortTimeString(); 

        //Inserts current time into field last login to update the column 
        cmd.CommandText = "INSERT INTO Logins (UserId, Last_login) VALUES (@UserId, @Last_login)"; 
        cmd.Parameters.AddWithValue("@UserId", userid); 
        cmd.Parameters.AddWithValue("@Last_login",time); 
        cmd.ExecuteNonQuery(); 

        this.Hide(); 

        //loads the protected menu 
        Protected protectedform = new Protected(txtuser.Text); 
        protectedform.Show(); 
       } 
       else 
       { 
        DialogResult dlgResult; 
        dlgResult = MessageBox.Show(
          "Please try again", 
          "Login unsucessful", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Warning, 
          MessageBoxDefaultButton.Button1); 
       } 
       connection.Close(); 
       connection.Dispose();     
      } 
      catch (SqlException sql) 
      { 
       MessageBox.Show(sql.Message); 
      } 
     } 

Пример исполнения: http://imgur.com/88IziLt

Если кто-то может заметить или знает способ обойти это, пожалуйста, дайте мне знать :).

Большое спасибо, 10gez10

ответ

2

Ваш первый запрос должен быть только простой SELECT, с параметрами @UserName и @Password

using(SqlCommand cmd = new SqlCommand(@"SELECT * FROM Logins 
            WHERE Username = @Username 
             AND Password = @Password", connection); 
{ 
    cmd.Parameters.AddWithValue("@Username", txtuser.Text); 
    cmd.Parameters.AddWithValue("@Password", security.AES(security.Hashstring(txtpass.Text))); 
    using(SqlDataReader dr = cmd.ExecuteReader()) 
    { 
     if (dr.Read()) 
     .... 
    } 
} 

Теперь, если вы обнаружили, что ваш пользователь, вы должны использовать запрос UPDATE используя значение userid для установки lastlogin

..... 
dr.Close(); 

//Clears previous SQL command 
cmd.Parameters.Clear(); 

DateTime timeNow = DateTime.UtcNow; 
time = timeNow.ToShortTimeString(); 

//Inserts current time into field last login to update the column 
cmd.CommandText = @"UPDATE Logins SET Last_login 
        WHERE UserID = @UserId"; 
cmd.Parameters.AddWithValue("@UserId", userid); 
cmd.Parameters.AddWithValue("@Last_login",time); 
cmd.ExecuteNonQuery(); 
+0

Спасибо дорогой сэр, может Не верю, что я пропустил этот lol – 10AlexD10

Смежные вопросы