Since you don't add the columns into the data table before you do the fetch, the data type in your column in the data table will be the corresponding datatype from what's in the database.
Seems that you're trying to handle multiple different kind of queries with this method. What I actually would suggest is that instead of trying to build a 'common' fetch mechanism where you use concatenated strings, build the 'specialized' SqlCommand instances and use SqlParameters instead of literal conditions. If you like you can have a helper function to execute the commands and to fill a datatable.
If you, for some reason, need to have a string in some columns, you can also handle the conversion in the database using for example
cast[
^]