获取数据行中列的数据类型 C#.NET
Get data type of columns in data row C#.NET
我现在已经浏览了很多问题来解决我的问题,但我真的找不到任何问题!
我正在对 ERP 系统进行集成,并且经常遇到同样的问题,所以现在是时候采取一些措施了。
许多 SOAP 网络服务 return 查询结果为 System.Data.DataSet,其中数据集有 1 table.
问题是我得到的规范可能说日期值是 DateTime 数据类型,但我的程序并不真正同意。
有没有办法获取DataRow中每一列的具体数据类型?
我创建了一个 UnitTest 来测试我的扩展函数 GetColumnTypes(DataTable Table).
DataTable tbl = new DataTable("TestTable");
tbl.Columns.Add("INTEGER");
tbl.Columns.Add("STRING");
tbl.Columns.Add("DATETIME");
tbl.Columns.Add("DOUBLE");
tbl.Columns.Add("FLOAT");
tbl.Columns.Add("LONG");
tbl.Rows.Add(int.MaxValue, string.Empty, DateTime.MaxValue, double.MaxValue, float.MaxValue, long.MaxValue);
这只是一个虚拟 table 但应该可以达到目的。还有我的扩展方法。
public static Type[] GetColumnTypes(DataTable Table)
{
IList<Type> types = new List<Type>();
DataRow row = Table.Rows[0];
foreach (object item in row.ItemArray)
{
types.Add(item.GetType());
}
return types.ToArray();
}
这里的结果是行数组中每一项的字符串。即使我在行中发送了特定的原始数据类型,例如。 long.MaxValue等
如果我尝试获取 Table.Columns 然后使用 DataType,我也只能获取字符串。
有办法吗?
谢谢:)
在向 DataTable 添加一个列时,它会决定数据的类型,否则它会将其作为字符串默认值。
所以在添加列时做下面的修改然后它会给你预期的结果
DataTable tbl = new DataTable("TestTable");
tbl.Columns.Add("INTEGER",typeof(int));
tbl.Columns.Add("STRING", typeof(string));
tbl.Columns.Add("DATETIME", typeof(DateTime));
tbl.Columns.Add("DOUBLE", typeof(double));
tbl.Columns.Add("FLOAT", typeof(float));
tbl.Columns.Add("LONG", typeof(long));
tbl.Rows.Add(int.MaxValue, string.Empty, DateTime.MaxValue, double.MaxValue, float.MaxValue, long.MaxValue);
GetColumnTypes(tbl);
我现在已经浏览了很多问题来解决我的问题,但我真的找不到任何问题!
我正在对 ERP 系统进行集成,并且经常遇到同样的问题,所以现在是时候采取一些措施了。
许多 SOAP 网络服务 return 查询结果为 System.Data.DataSet,其中数据集有 1 table.
问题是我得到的规范可能说日期值是 DateTime 数据类型,但我的程序并不真正同意。
有没有办法获取DataRow中每一列的具体数据类型?
我创建了一个 UnitTest 来测试我的扩展函数 GetColumnTypes(DataTable Table).
DataTable tbl = new DataTable("TestTable");
tbl.Columns.Add("INTEGER");
tbl.Columns.Add("STRING");
tbl.Columns.Add("DATETIME");
tbl.Columns.Add("DOUBLE");
tbl.Columns.Add("FLOAT");
tbl.Columns.Add("LONG");
tbl.Rows.Add(int.MaxValue, string.Empty, DateTime.MaxValue, double.MaxValue, float.MaxValue, long.MaxValue);
这只是一个虚拟 table 但应该可以达到目的。还有我的扩展方法。
public static Type[] GetColumnTypes(DataTable Table)
{
IList<Type> types = new List<Type>();
DataRow row = Table.Rows[0];
foreach (object item in row.ItemArray)
{
types.Add(item.GetType());
}
return types.ToArray();
}
这里的结果是行数组中每一项的字符串。即使我在行中发送了特定的原始数据类型,例如。 long.MaxValue等
如果我尝试获取 Table.Columns 然后使用 DataType,我也只能获取字符串。
有办法吗?
谢谢:)
在向 DataTable 添加一个列时,它会决定数据的类型,否则它会将其作为字符串默认值。 所以在添加列时做下面的修改然后它会给你预期的结果
DataTable tbl = new DataTable("TestTable");
tbl.Columns.Add("INTEGER",typeof(int));
tbl.Columns.Add("STRING", typeof(string));
tbl.Columns.Add("DATETIME", typeof(DateTime));
tbl.Columns.Add("DOUBLE", typeof(double));
tbl.Columns.Add("FLOAT", typeof(float));
tbl.Columns.Add("LONG", typeof(long));
tbl.Rows.Add(int.MaxValue, string.Empty, DateTime.MaxValue, double.MaxValue, float.MaxValue, long.MaxValue);
GetColumnTypes(tbl);