创建新的类型化DataSet对象(c#)

我使用DataGrid来显示xml文件。 Grid的DataSource是一个Typed DataSet。(使用schema)

Assembly assembly = Assembly.GetExecutingAssembly(); Stream stream = assembly.GetManifestResourceStream("XML_Reader.Resources.schema.xsd"); XmlSchemaSet schemas = new XmlSchemaSet(); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(null, XmlReader.Create(stream)); using (XmlReader reader = XmlReader.Create(xmlFile, settings)) { newDataSet.ReadXml(reader); } dataGrid.DataSource = newDataSet; 

我在我的项目中添加了一个xsd模式,并使用MSDataSetGenerator生成newDataSet。 (VS2008)。
现在我想为我读取的每个新( 分层xml )文件创建一个新的DataSet对象。

创建一个新的DataSet对象不是问题,但数据类型是不正确的,所以我不能很好地对它们进行排序(特别是数字字段)。 在我看来,我需要创建一个新的Typed DataSet

那么我该如何解决这个问题呢?

Visual Studio概述中的数据集 –

键入与无类型数据集

类型化数据集是首先从基础DataSet类派生的数据集,然后使用存储在.xsd文件中的数据集设计器中的信息来生成新的强类型数据集类。 生成来自模式(表,列等)的信息,并将其作为一组第一类对象和属性编译到此新数据集类中。 由于类型化数据集inheritance自基础DataSet类,因此类型化类假定DataSet类的所有function,并且可以与将DataSet类的实例作为参数的方法一起使用。

相反,无类型数据集没有相应的内置模式。 与在类型化数据集中一样,无类型数据集包含表,列等 – 但这些数据集仅作为集合公开。 (但是,在无类型数据集中手动创建表和其他数据元素后,可以使用数据集的WriteXmlSchema方法将数据集的结构导出为模式。)

是的,您可以使用Visual Studio自动生成这些:

  • 如何:创建类型化数据集

或者,您可以创建自己的强类型DataSet (这是更清洁的IMO) 。 例:

 using System.Data; public class CatsDataTable : DataTable { public CatsDataTable() : base() { base.TableName = "cats"; Columns.Add(new DataColumn(SqlTokens.id_cats, typeof(int))); Columns.Add(new DataColumn(SqlTokens.owners_id_owners, typeof(int))); Columns.Add(new DataColumn(SqlTokens.cats_name, typeof(string))); Columns.Add(new DataColumn(SqlTokens.cats_number_of_spots, typeof(int))); } } public class OwnersDataTable : DataTable { public OwnersDataTable() : base() { base.TableName = "owners"; Columns.Add(new DataColumn(SqlTokens.id_owners, typeof(int))); Columns.Add(new DataColumn(SqlTokens.owners_name, typeof(string))); } } public class PetsDataSet : DataSet { public PetsDataSet() : base() { base.TableName = "pets"; Tables.Add("cats"); Tables.Add("owners"); } } 

关于垃圾收集的切线

垃圾收集(GC)是一种自动内存管理。 这是资源管理的一个特例,其中管理的有限资源是内存。 垃圾收集器或仅收集器尝试回收垃圾或由程序不再使用的对象占用的内存。 (维基百科)

  • 垃圾收集(维基百科)
  • 垃圾收集器基础知识和性能提示

让我回答我自己的问题;-))

类型化的DataSet就像一个可以像任何其他类一样实例化的类。工具生成的任何东西都没有魔力,这些工具只是生成类,你可以像使用其他类一样使用这些类。

Do NewDataSet d1 = new NewDataSet(); 你在那里放置正确的类名而不是“NewDataSet”。