簡體   English   中英

如何在運行時使用C#創建強類型數據集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM