有没有办法知道DataTable
中列的确切类型?现在我这样做:
DataTable st = dataReader.GetSchemaTable();
foreach (DataColumn col in st.Columns)
{
var type = col.DataType;
}
现在使用type.Name
我能够找到它是一个数字(int
或decimal
..)还是string
,但问题是我需要确切的类型,例如,如果在数据库中,请说列Rate
是NUMBER(4,3)
,那么在我的代码中,我只输入类型为'十进制'并且没有关于格式4,3
的信息。
现在要求是我需要根据类型格式化值,例如。如果Rate=1.4
它应显示为0001.400
(根据格式NUMBER(4,3)
)。因此,因为我没有信息,所以我无法进一步处理这些值。反正知道了吗?
由于
答案 0 :(得分:6)
您可以使用NumericPrecision
和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);
}
}
}
更多信息:GetSchemaTable
我使用包含NumberColumn
类型的numeric(4, 3)
列的新表格对其进行了测试:
Column: NumberColumn Type: decimal Precision: 4 Scale: 3
答案 1 :(得分:0)
dataReader.GetSchemaTable()返回的DataTable是基础结果的模式。此表包含基础表中多列的许多记录。所以你需要循环遍历行。每行包含基础表的单个列的元数据。您可以获取列的元数据,如下所示
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"]));
}