創建與我的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);
}