"I still do not understand why it fails."
This isn't much as error reports go - it tells us nothing much about the problem.
But...there is a very big mistake you are making here, which may be the cause of your problem.
cmd = New SqlCommand("INSERT INTO Table1 (row1,row2,row3,row4,row5)VALUES('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "')", con)
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.
cmd = New SqlCommand("INSERT INTO Table1 (row1,row2,row3,row4,row5)VALUES(@R1, @R2, @R3, @R4, @R5)", con)
cmd.Parameters.AddWithValue("@R1", TextBox1.Text)
cmd.Parameters.AddWithValue("@R1", TextBox2.Text)
cmd.Parameters.AddWithValue("@R1", TextBox3.Text)
cmd.Parameters.AddWithValue("@R1", TextBox4.Text)
cmd.Parameters.AddWithValue("@R1", TextBox5.Text)
There is a good chance that this will cure your problem as well.
And please: for your own sake (and that of the poor sods who have to come after you and clear up the mess during maintenance)
stop using default names for things. Even for testing, using "TextBoxN" and "RowN" and "TableN" is silly, lazy and a source of errors later when you can't remember which text box hold what value. So use names that describe what the controls, rows, and tables hold. It doesn't take long, and it really is easier to work with - Intellisense sorts it out for you!