Если у вас есть заранее заданный список полей и их ожидаемых типов данных, я считаю, что это должен быть наиболее приемлемый подход:
создать XML-схему следующим образом:
<?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>
и читать:
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);`
улов в том, что формат даты должен быть действителен для системных настроек, в короткие сроки, как «дд / мм / гг»
как только тип установлен, вы можете отформатировать его как требуется.