The reason of your datatype mismatch is the presence of single quotes around the parameter names Basically you pass a string instead of a number or a date
sqlCMD = "" + _
"INSERT INTO Orders " + _
" ([NAME], " + _
" [PhoneNumber], " + _
" [ProductOrdered], " + _
" [OrderDate]) " + _
"VALUES (@CustomerName, " + _
" @PhoneNumber, " + _
" @ProductOrdered, " + _
" @OrderDate); "
This could be the real source of your type mismatch.