SImple: you don't list the column names into which you are putting your values, so SQL has to work with the current column order and assume that's what you wanted.
If the starting date isn't the fifth column in your DB table design, then it'll try to insert it into whatever column is the fifth, find it's an integer, try to convert the value and fail.
The best solution is always to specifically list the columns as part of the INSERT statement:
INSERT INTO MyTable (myColumn1, myColumn2) VALUES (@C1, @C2)
And then the column order becomes irrelevant and your code works even if you change the DB table design later.