如何获得确切的数字列类型,包括.规模和精度?

IFl*_*igh 7 c# sql datatable ado.net sqldatareader

有没有办法知道一个列的确切类型DataTable?现在我这样做:

DataTable st = dataReader.GetSchemaTable();
foreach (DataColumn col in st.Columns)
{
   var type = col.DataType;
}
Run Code Online (Sandbox Code Playgroud)

现在用type.Name我能找到,如果它是一个数字(intdecimal..)或string,但问题是我需要的确切类型,例如,如果在数据库中让说列RateNUMBER(4,3)那么这里我的代码,我只得到类型为"十进制'并且没有关于格式的信息4,3.

现在要求是我需要根据类型格式化值,例如.如果Rate=1.4它应显示为0001.400(根据格式NUMBER(4,3)).因此,因为我没有信息,所以我无法进一步处理这些值.反正知道一样吗?

谢谢

Tim*_*ter 7

你可以使用NumericPrecisionNumericScale:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息: GetSchemaTable

我用一个新列表测试了它,其中包含一个NumberColumn类型的列numeric(4, 3):

Column: NumberColumn Type: decimal Precision: 4 Scale: 3
Run Code Online (Sandbox Code Playgroud)