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
我能找到,如果它是一个数字(int
或decimal
..)或string
,但问题是我需要的确切类型,例如,如果在数据库中让说列Rate
是NUMBER(4,3)
那么这里我的代码,我只得到类型为"十进制'并且没有关于格式的信息4,3
.
现在要求是我需要根据类型格式化值,例如.如果Rate=1.4
它应显示为0001.400
(根据格式NUMBER(4,3)
).因此,因为我没有信息,所以我无法进一步处理这些值.反正知道一样吗?
谢谢
你可以使用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);
}
}
}
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)