我需要在运行时用户首选目标数据库中创建一个强类型数据集。 Visual Studio中提供了创建类型化数据集大量设计时间支持。 我需要自动生成类型化数据集在运行时的目标数据库的过程。
应该创造...
1)XSD文件。
2.)类型DataSet represnting数据库
3)键入的表内的所有数据库表和列包装。
4。)中的每个表的TableAdapters。
所以,我需要生成的同时使用Visual Studio的类型化的DataSet设计器的设计时间,这通常是在运行时创建同一类型化的DataSet。
我倾向于在这一个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它。
也许我错读您的要求。
你也许可以使用XSD.EXE
。 从程序火起来...
鉴于我与类型化数据集,在过去的经验 - 和所有附带的故障和问题 - 我强烈建议您调查与ORM映射器这样做。 换句话说,从类型化数据集逃跑。