2008-12-15 93 views
2

创建与我的SqlServer数据库中的表具有相同结构的DataTable的最佳方式是什么?目前,我正在使用SqlDataAdapter.Fill()和一个带回列但没有行的查询。这工作正常,但似乎很奇怪。使用数据库表结构创建数据表

有没有更好的方法?

回答

0

那么,你不知道结构?

“SET FMT_ONLY ON”或“WHERE 1 = 0”技巧都经过严格测试(结果不同)。

此处的查询是否为动态?我忍不住想你应该知道架构已经...

1

那么,如果你使用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); 
      } 
0

退房这种方法,SqlDataAdapter.FillSchema(),在MSDN的ARTICAL会告诉你如何使用它。

0

是的,我知道模式现在是什么,但它可能会改变,代码应该适应。此外,谁想要输入33场的规格。如果我理解正确,我的解决方案是“where 1 = 0”类型。我认为FillSchema也应该可以工作,但是由于它需要执行主键,所以存在隐患。由于我正在读取可能有错误的数据作为验证过程的一部分,因此我无法确定主键不会被复制。

谢谢。

1

转换代码很好。它没有考虑到数据库可能有空类型。我已经为此添加了一个检查并将可空字段转换为不可空。

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); 
}