Why are you assuming that the id of the "just logged in user" is going to be the number of rows in a table plus a random number? Because effectively, that is what you are doing.
When a user logs in, you check his password against a (hashed for security) value stored in the DB in your login table, and fetch the userID from that table. You store this in your app (in a variable, or in the Session or a Cookie for web based apps) and you reference that value every time you need to know who the user is. You don;t try to "work it out" each time, because once your login form or page is closed, you don't have any real access to the login information again!
So when you store your access info, you use the stored userID value as the table data:
cmd.Parameters.AddWithValue("@Identification", userID)
In addition, you probably don't want - or need - to set a specific value to the ID column of your "accessed" table as that should be an IDENTITY or UNIQUEIDENTIFIER column that your code shouldn't care about (or be maintaining in a multiuser system).
You accessed table should not store the Username - it's got the UserID so it can fetch the username with a simple JOIN query when you need it - it's wasteful and dangerous to store duplicate information.
You'd probably also be better off storing the date and time values as a single DATETIME (or DATETIME2) column - and store a UTC value in there so it's consistent across the database regardless of where the the user is located.
My version of the Accessed table would be:
ID INT, IDENTITY, Primary Key, Not Null.
UserID INT or GUID depending on your Users table, Foreign Key to Users table, Not Null
Timestamp DATETIME (or DATETIME2), Not Null, Default Value = GETUTCDATE() (stored as UTC)
Action INT (type of access, so you can store login, bad login attempt, update, etc.)
Then all you pass to it when you insert a value is the UserID and the Action code via parameters.