[英]How do I create strongly typed dataset during runtime using C#?
我需要在運行時為用戶首選的目標數據庫創建一個強類型的數據集。 Visual Studio具有大量的設計時支持,可用於創建類型化的數據集。 我需要在運行時自動為目標數據庫生成類型化數據集的過程。
它應該創建...
1.)XSD文件。
2.)表示數據庫的類型化數據集
3.)為所有數據庫表和表中的列鍵入包裝器。
4.)每個表的TableAdapter。
因此,我需要在運行時生成相同的類型化數據集,該類型化數據集通常是在設計時使用Visual Studio的類型化數據集設計器創建的。
您可能使用XSD.EXE
。 從您的程序啟動它...
我傾向於在這一方面同意jcollum,在運行時使用類型化數據集可能是錯誤的方法。 另一方面,如果您只希望能夠在運行時從數據庫中獲取結構化數據(也稱為DataTable),則可以使用反射從任意數據結果中創建TableAdapter。
var results = (from data in db.SomeTable select data).ToArray();
DataTable dt = ObjectArrayToDataTable(results);
// At this point you have a properly structure DataTable.
// Here is your XSD, if absolutely needed.
dt.WriteXMLSchema("c:\somepath\somefilename.xsd");
private static System.Data.DataTable ObjectArrayToDataTable(object[] data)
{
System.Data.DataTable dt = new System.Data.DataTable();
// if data is empty, return an empty table
if (data.Length == 0) return dt;
Type t = data[0].GetType();
System.Reflection.PropertyInfo[] piList = t.GetProperties();
foreach (System.Reflection.PropertyInfo p in piList)
{
dt.Columns.Add(new System.Data.DataColumn(p.Name, p.PropertyType));
}
object[] row = new object[piList.Length];
foreach (object obj in data)
{
int i = 0;
foreach (System.Reflection.PropertyInfo pi in piList)
{
row[i++] = pi.GetValue(obj, null);
}
dt.Rows.Add(row);
}
return dt;
}
您可以應用相同的主體來創建結構化的DataSet並輕松地為其創建DataAdapter。
也許我誤讀了您的要求。
鑒於我過去使用類型數據集的經驗以及所有伴隨的失敗和問題,我強烈建議您研究使用ORM映射器進行此操作。 換句話說,請遠離類型化數據集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.