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