Well yes...
da = new SqlDataAdapter("insert into shop02 ( firstname, lastname, gender,email,city, state,country, mobile) values('"+TextBox1.Text+"','"+TextBox2.Text+"','"+TextBox3.Text+"','"+TextBox3.Text+"', '"+TextBox4.Text+"','"+TextBox5.Text+"', '"+TextBox6.Text+"', '"+TextBox7.Text+"', '"+TextBox8.Text+"')", con);
You specify 8 columns, and provide 9 values. Where should it put the "extra" one? Why are you including TextBox3 twice?
And don't do it like that: Do not concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead.
BTW: Do yourself a favour, and stop using Visual Studio default names for everything - you may remember that "TextBox8" is the mobile number today, but when you have to modify it is three weeks time, will you then? Use descriptive names - "tbMobileNo" for example - and your code becomes easier to read, more self documenting, easier to maintain - and surprisingly quicker to code because Intellisense can get to to "tbMobile" in three keystrokes, where "TextBox8" takes thinking about and 8 keystrokes...