if you have a predetermined list of fields and their expected datatypes, i believe, this should be the most maintainable approach:
create a xml schema as follows:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="Field1" type="xs:int" minOccurs="0" />
<xs:element name="Field2" type="xs:string" minOccurs="0" />
<xs:element name="Field3" type="xs:date" minOccurs="0" />
<xs:element name="Field4" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
and read:
string query = "SELECT Field1, Field2, Field3, Field4 FROM [" + row["TABLE_NAME"].ToString() + "]";
DataSet ds = new DataSet();
ds.ReadXmlSchema(@".\MySchema.xsd");
OleDbDataAdapter data = new OleDbDataAdapter(query, Connection);
data.Fill(ds);
ds.Tables[0].TableName = row["TABLE_NAME"].ToString().Replace("$", string.Empty);`
the catch being that date format has to be valid for the system settings is in short dates as 'dd/mm/yy'
once the type is set, you can format as required.