Your question is in essence about how to do a SQL query that would delete all but one row in a set of rows that are seen as duplicates.
Your code suggests that table "tbluser" has columns "username" and "user_id" in it. If each row has a unique user_id, then something like this might work:
DELETE FROM tbluser WHERE
username='some_acct_name'
AND user_id <>
(SELECT MIN(user_id) FROM tbluser WHERE
username='some_acct_name')
If you are using SQL Server 2012 or later (not sure about earlier), and especially if there is nothing to distinguish one row from another (i.e. nothing like a unique user_id), then something like this could work:
DELETE TOP (4) FROM tbluser WHERE username='some_acct_name'
That will delete up to the first four rows it finds, then stops. See https://learn.microsoft.com/en-us/sql/t-sql/statements/delete-transact-sql for more details.
As has been mentioned above, you can take a look at T-SQL: Deleting all duplicate rows but keeping one for more ideas.
Once you decide on the sort of query to use, you can then code it into your VB.NET program. When you do, though, NEVER do it this way!:
' Do NOT do it like this!
commandtext = "select * from tbluser where username = '" & admin & '""
' Use parameters instead! Like you did for the DELETE part of your code!
Search the web (google, bing, etc.) on "vb net sql server examples parameterized query" for examples on using parameters. E.g., https://visualstudiomagazine.com/articles/2017/07/01/parameterized-queries.aspx.
Finally, here's a query to get a count of all your duplicate rows, which is nice (and fast) - no need to do loops!:
SELECT COUNT(*) FROM tbluser WHERE username='some_acct_name'