Very often the root cause for this kind of situation is that the application does not use parameters. Instead values from client are concatenated directly to the SQL statement. Something like
... MyDateColumn = '" + datetimepicker123.value + "'...
If you have such code on the client side you should modify it to use parameters correctly.
Another scenario is that you use paramters but the value is a string and an implicit conversion is done. Again the best solution would be to use correct type of parameter. If the target column is datetime then the type of the parameter should be datetime and so on
And the last thing is, as you wrote, you have stored date information in a character column. However you try to handle the data as date values. The only feasible solution for this is to convert the character columns to date/time columns. There is no reason to store data in another format if a native data type is present. It just causes unnecessary troubles...