Cómo get el tipo exacto de columnas numéricas incl. escala y precisión?

¿Hay alguna manera de saber el tipo exacto de una columna en una DataTable ? En este momento estoy haciendo esto:

 DataTable st = dataReader.GetSchemaTable(); foreach (DataColumn col in st.Columns) { var type = col.DataType; } 

Ahora con type.Name puedo encontrar si es un número ( int o decimal ..) o una string pero el problema es que necesito el tipo exacto, por ejemplo, si en la database digamos que la columna Rate es NUMBER(4,3) entonces aquí en mi código solo obtengo el tipo como 'Decimal' y no hay información sobre el Formato 4,3 .

Ahora el requisito es que necesito formatear los valores según su tipo para, por ejemplo. si Rate=1.4 debe mostrarse como 0001.400 (de acuerdo con el Formato NUMBER(4,3) ). Por lo tanto aquí, dado que no tengo información, no puedo procesar más los valores. ¿Hay alguna forma de saber lo mismo?

Gracias

Puede usar NumericPrecision y NumericScale :

 using (var con = new SqlConnection(Properties.Settings.Default.RM2ConnectionString)) using (var cmd = new SqlCommand("SELECT * FROM dbo.Test", con)) { con.Open(); using (var reader = cmd.ExecuteReader()) using (var schemaTable = reader.GetSchemaTable()) { foreach (DataRow row in schemaTable.Rows) { string column = row.Field<string>("ColumnName"); string type = row.Field<string>("DataTypeName"); short precision = row.Field<short>("NumericPrecision"); short scale = row.Field<short>("NumericScale"); Console.WriteLine("Column: {0} Type: {1} Precision: {2} Scale: {3}", column, type, precision, scale); } } } 

Más información: GetSchemaTable

Lo he probado con una tabla nueva con una sola columna NumberColumn de tipo numeric(4, 3) :

 Column: NumberColumn Type: decimal Precision: 4 Scale: 3 

El DataTable devuelto por dataReader.GetSchemaTable () es el esquema del resultado subyacente. Esta tabla contiene, esos muchos loggings, tantas columnas en la tabla subyacente. Entonces necesitas pasar por las filas. Cada fila contiene los metadatos de la columna individual de la tabla subyacente. Puede get los metadatos de la columna como se muestra a continuación

 DataTable st = reader.GetSchemaTable(); foreach (DataRow row in st.Rows) { Console.Write(string.Format("ColumnName:{0} DataType:{1} Ordinal:{2} Precision:{3} Size:{4} Scale:{5}", row["ColumnName"], row["DataTypeName"], row["ColumnOrdinal"], row["NumericPrecision"], row["ColumnSize"], row["NumericScale"])); }