创建与我的SqlServer数据库中的表具有相同结构的DataTable的最佳方式是什么?目前,我正在使用SqlDataAdapter.Fill()和一个带回列但没有行的查询。这工作正常,但似乎很奇怪。使用数据库表结构创建数据表
有没有更好的方法?
创建与我的SqlServer数据库中的表具有相同结构的DataTable的最佳方式是什么?目前,我正在使用SqlDataAdapter.Fill()和一个带回列但没有行的查询。这工作正常,但似乎很奇怪。使用数据库表结构创建数据表
有没有更好的方法?
那么,你不知道结构?
“SET FMT_ONLY ON”或“WHERE 1 = 0”技巧都经过严格测试(结果不同)。
此处的查询是否为动态?我忍不住想你应该知道架构已经...
那么,如果你使用Linq2Sql,你可以反思实体类,并根据属性名和数据类型创建数据表。
Type type = typeof(Product); //or whatever the type is
DataTable table = new DataTable();
foreach(var prop in type.GetProperties())
{
table.Columns.Add(prop.Name, prop.PropertyType);
}
退房这种方法,SqlDataAdapter.FillSchema(),在MSDN的ARTICAL会告诉你如何使用它。
是的,我知道模式现在是什么,但它可能会改变,代码应该适应。此外,谁想要输入33场的规格。如果我理解正确,我的解决方案是“where 1 = 0”类型。我认为FillSchema也应该可以工作,但是由于它需要执行主键,所以存在隐患。由于我正在读取可能有错误的数据作为验证过程的一部分,因此我无法确定主键不会被复制。
谢谢。
转换代码很好。它没有考虑到数据库可能有空类型。我已经为此添加了一个检查并将可空字段转换为不可空。
Type type = typeof(Product); //or whatever the type is
DataTable table = new DataTable();
foreach(var prop in type.GetProperties())
{
Type colType = prop.PropertyType;
if (colType.IsGenericType && colType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
System.ComponentModel.NullableConverter nc = new System.ComponentModel.NullableConverter(colType);
colType = nc.UnderlyingType;
}
table.Columns.Add(prop.Name, colType);
}