I load the data into the DataTable from Access.

When I want to get a column type like this:

newDT.Columns[columnName].DataType.FullName 

I get the .Net types.

For example, instead of ShotText or LongText, I have string.

Can I somehow get SQL types?

1 answer 1

You cannot get SQL types when data is already loaded into a DataTable , but you can retrieve some information during data loading .

If you use an OleDbDataAdapter to populate a DataTable you will instead need to use an OleDbDataReader and specifically its GetSchemaTable method:

 DataTable dt = new DataTable("TableName"); OleDbCommand cmd = new OleDbCommand("select * from TableName", connection); using (OleDbDataReader dr = cmd.ExecuteReader()) { DataTable dtSchema = dr.GetSchemaTable(); //берём из схемы интересующие нас мета-данные foreach (DataRow col in dtSchema.Rows) Console.WriteLine("{0} is {1}({2})", col["ColumnName"], (OleDbType)col["ProviderType"], col["ColumnSize"]); //загружаем данные dt.Load(dr); } 

I don’t know how useful this can be, but the OleDbDataReader also has a GetDataTypeName method:

 using (OleDbDataReader dr = cmd.ExecuteReader()) { DataTable dtSchema = dr.GetSchemaTable(); for (int i = 0; i < dr.FieldCount; i++) Console.WriteLine(dr.GetDataTypeName(i)); dt.Load(dr); }