将现有约束添加到数据集

DataAdapterFill 方法仅使用数据源中的表列和行来填充 DataSet;尽管约束通常由数据源设置,但 Fill 方法在默认情况下不会将此模式信息添加到 DataSet 中。 要使用数据源中的现有主键约束信息填充DataSet,可以调用DataAdapterFillSchema方法,或者在调用Fill之前,将DataAdapterMissingSchemaAction属性设置为AddWithKey。 这将确保 DataSet 的主键约束与数据源中的约束一致。 约束信息不包含在内,必须显式创建,如数据表约束中所示。

在向 DataSet 添加架构信息后再填充数据,确保主键约束包含在 DataTable 对象的 DataSet 中。 因此,当执行其他对DataSet的填充调用时,主键列信息用于将数据源中的新行与每个DataTable中的当前行进行匹配,并且表中的当前数据会被数据源中的数据覆盖。 如果没有架构信息,来自数据源的新行将追加到 DataSet 中,从而导致重复的行。

备注

如果数据源中的列被标识为自动递增,则 FillSchema 方法或具有 MissingSchemaActionAddWithKeyFill 方法将创建一个 DataColumn,其中 AutoIncrement 属性设置为 true。 但是,需要自行设置 AutoIncrementStepAutoIncrementSeed 值。 有关自动递增列的详细信息,请参阅创建自动增量列

使用 FillSchema 或设置 MissingSchemaActionAddWithKey 需要对数据源进行额外处理,以确定主键列信息。 这一额外的处理可能会降低性能。 如果主键信息在设计时已知,为了实现最佳性能,建议显式指定一个或多个主键列。 有关显式设置表的主键信息的详情,请参见定义主键

下面的代码示例演示如何将架构信息添加到 DataSet 使用 FillSchema

Dim custDataSet As New DataSet()

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");
custAdapter.Fill(custDataSet, "Customers");

下面的代码示例演示如何使用方法的 DataSetMissingSchemaAction.AddWithKey 属性将架构信息添加到其中Fill

Dim custDataSet As New DataSet()

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custAdapter.Fill(custDataSet, "Customers");

处理多个结果集

DataAdapter如果遇到从 SelectCommand 返回的多个结果集,它将在数据集中创建多个表。 表将被赋予一个从零开始的TableN增量默认名称,而不是“Table0”。 如果将表名作为参数传递给 FillSchema 方法,则表将被赋予从零开始的 TableNameN 增量名称,并以 TableName 开头,而不是以“TableName0”开头。

备注

FillSchema对象的方法用于调用OleDbDataAdapter命令,该命令返回多个结果集时,仅返回第一个结果集中的架构信息。 使用 OleDbDataAdapter 返回多个结果集的架构信息时,建议指定一个MissingSchemaAction,并在调用Fill方法时获取架构信息。

另请参阅