如何创建强类型使用C#运行时数据集?(How do I create strongly typed

2019-10-29 06:09发布

我需要在运行时用户首选目标数据库中创建一个强类型数据集。 Visual Studio中提供了创建类型化数据集大量设计时间支持。 我需要自动生成类型化数据集在运行时的目标数据库的过程。

应该创造...

1)XSD文件。

2.)类型DataSet represnting数据库

3)键入的表内的所有数据库表和列包装。

4。)中的每个表的TableAdapters。

所以,我需要生成的同时使用Visual Studio的类型化的DataSet设计器的设计时间,这通常是在运行时创建同一类型化的DataSet。

Answer 1:

我倾向于在这一个jcollum同意,使用类型化的DataSet在运行时可能是错误的路要走。 如果在另一方面,你只是想能够从在运行一个数据库中获取结构化数据(也就是,一个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;
}

您可以应用相同的主要创建一个结构化的数据集轻松地创建一个DataAdapter它。

也许我错读您的要求。



Answer 2:

你也许可以使用XSD.EXE 。 从程序火起来...



Answer 3:

鉴于我与类型化数据集,在过去的经验 - 和所有附带的故障和问题 - 我强烈建议您调查与ORM映射器这样做。 换句话说,从类型化数据集逃跑。



文章来源: How do I create strongly typed dataset during runtime using C#?