Always try to use "unambiguous dates" when passing information around - especially to and from databases.
What does that actually mean? It means use a date format that cannot be misinterpreted no matter which in country or time zone you're in nor which language is being used.
Example: 01/06/2016 would be 1st June in the UK but 6th January in the USA.
You are pretty close because you have used dd MMM yyyy as the format. Which is fine in most languages ... "27 Feb 2017" works in English, Dutch, German, etc etc but in Finnish would be meaningless (Finnish for February is helmikuu). It's not unusual these days to have SQL Server servers hosted in different countries to the one where the application is running. Nor is it unusual to have users from multiple countries accessing the same SQL database.
There are two formats for dates that are guaranteed to work for all versions of SQL Server. Usefully they work for most other databases as well.
yy-MM-ddTHH24:mi:ss
and
yyyyMMdd HH24:mi:ss
It's also worth having a read up on the ISO standard for dates -
ISO 8601 - Wikipedia[
^]
If this doesn't solve your specific problem, then put a breakpoint (F9) on the line
itmarr(1, 0) = Format(TxtDate.Text, "dd MMM yyyy")
and have a look at the contents of TxtDate - you'll probably find that it can't be formatted as a date at all. You should really add some validation OR use a DatePicker control.