我有一個DataSet,我需要在運行時動態添加表,但這些表需要反映現有的數據庫結構。有沒有辦法在運行時將特定表的模式(不是數據)拉到DataSet中?基於數據庫模式動態添加表
因此,例如,我可能在數據庫中有一個帳戶表(以及數百個帳戶)。我需要在運行時在DataSet中創建一個Account表(基於最終用戶的各種操作),但是對於每個表而言,手動編寫這些表的手段太多。
我有一個DataSet,我需要在運行時動態添加表,但這些表需要反映現有的數據庫結構。有沒有辦法在運行時將特定表的模式(不是數據)拉到DataSet中?基於數據庫模式動態添加表
因此,例如,我可能在數據庫中有一個帳戶表(以及數百個帳戶)。我需要在運行時在DataSet中創建一個Account表(基於最終用戶的各種操作),但是對於每個表而言,手動編寫這些表的手段太多。
你沒有指定你正在使用的數據庫引擎,所以最好的通用方法是使用IDataReader的GetSchemaTable方法。
有關如何操作here的詳細信息。
如果您運行一個返回數據表的SQL查詢,它將具有該表的結構。因此,
select * from SourceTable where 1 = 2;
其中不返回行,但所有的列。 DataSet填充等完成。
您可以通過編程方式修改和檢查數據模式和數據。您可以通過編程將列添加到數據集:http://msdn.microsoft.com/en-us/library/hfx3s9wd.aspx
DataTable workTable = new DataTable("Customers");
DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32));
workCol.AllowDBNull = false;
workCol.Unique = true;
workTable.Columns.Add("CustLName", typeof(String));
workTable.Columns.Add("CustFName", typeof(String));
workTable.Columns.Add("Purchases", typeof(Double));
您可以創建新表還到DataSet。您可以檢查和遍歷所擁有的模式:查看DataSet的Tables屬性,它包含您的DataTables(DataTableCollection)。 DataTables包含Columns屬性。知道這很簡單。
爲什麼你不使用實體框架?然後你可以引用每個表作爲一個對象,並使用一些邏輯來確定哪些是需要的。 – AntLaC
使用 的SqlCommand 文本 「從INFORMATION_SCHEMA.COLUMNS選擇*在表格名=‘表名’」 你想用數據讀取器什麼.. –
@VenkatRenukaPrasad無需查詢數據庫,他能做到這一點編程因爲他有DataSet對象,所以他可以查看它並遍歷模式。看到我的答案。 –