You are passing less number of values than the mentioned numbers of columns. Your INSERT query expects 8 values but you are passing only 6 values. First correct that.
Secondly, put your query in a string variable and see what is the actual query being evaluated to. Something like following-
string query ="INSERT INTO NewUser(Position, Forename, Surname, [Telephone Number], Username, [Password], [Confirm Password], [Start Date]) VALUES('" + p.PositionPositionCmbx1+ "', '" + p.FirstName_txt1+ "', '" + p.Surname_txt1+ "', '" + p.Telnumber_txt+ "', '" + p.PasswordNU_txt1+ "', '" + p.ConfirmPasswrd_txt1+ "')";
UPDATE
The above is just to keep things simple and used your code only. But your code is seriously prone to
SQL Injection[
^]. And the best thing is you don't need to reinvent the wheel rather just some minor changes can do the job. Please check following links for further help. I strongly recommend to check and let me know if I can help in implementing that.
Using Parameterized queries to prevent SQL Injection Attacks in SQL Server[
^]
If you still need help, please let me know :)