DbDataAdapter.Fill 方法

定义

填充 DataSetDataTable

重载

Fill(DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)

使用 DataSet 和源表名称、命令字符串以及命令行为,在 DataSet 的指定范围中添加或刷新某些行以使它们与数据源中对应的行相一致。

Fill(DataTable[], Int32, Int32, IDbCommand, CommandBehavior)

DataSet 的指定范围中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

Fill(DataSet, String, IDataReader, Int32, Int32)

DataSet 的指定范围中添加或刷新行以与使用 DataSetDataTableIDataReader 名称的数据源中的行进行匹配。

Fill(DataSet, Int32, Int32, String)

DataSet 的指定范围中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

Fill(Int32, Int32, DataTable[])

添加或刷新一个或多个 DataTable 对象中的行,以匹配数据源中从指定记录开始并检索最多指定的最大记录数的行。

Fill(DataTable)

DataSet 的指定范围中添加或刷新行,以与使用 DataTable 名称的数据源中的行匹配。

Fill(DataTable, IDataReader)

DataTable 中添加或刷新行,以与使用指定的 DataTableIDataReader 名称的数据源中的行匹配。

Fill(DataSet, String)

DataSet 中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

Fill(DataSet)

DataSet 中添加或刷新行。

Fill(DataTable, IDbCommand, CommandBehavior)

DataTable 中添加或刷新行,以与使用指定的 DataTableIDbCommandCommandBehavior 的数据源中的行匹配。

Fill(DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

使用 DataSet 和源表名称、命令字符串以及命令行为,在 DataSet 的指定范围中添加或刷新某些行以使它们与数据源中对应的行相一致。

protected:
 virtual int Fill(System::Data::DataSet ^ dataSet, int startRecord, int maxRecords, System::String ^ srcTable, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual int Fill (System.Data.DataSet dataSet, int startRecord, int maxRecords, string srcTable, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.Fill : System.Data.DataSet * int * int * string * System.Data.IDbCommand * System.Data.CommandBehavior -> int
Protected Overridable Function Fill (dataSet As DataSet, startRecord As Integer, maxRecords As Integer, srcTable As String, command As IDbCommand, behavior As CommandBehavior) As Integer

参数

dataSet
DataSet

要用记录和架构(如果必要)填充的 DataSet

startRecord
Int32

从其开始的从零开始的记录号。

maxRecords
Int32

要检索的最大记录数。 指定 0 以检索开始记录后的所有记录。

srcTable
String

用于表映射的源表的名称。

command
IDbCommand

用于从数据源中检索行的 SQL SELECT 语句。

behavior
CommandBehavior

CommandBehavior 值之一。

返回

已在 DataSet 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

例外

源表无效。

startRecord 参数小于 0。

maxRecords 参数小于 0。

注解

maxRecords如果值为 0,则获取在开始记录之后找到的所有记录。 如果 maxRecords 大于剩余行数,则仅返回剩余行,并且不会发出错误。

方法 Fill 使用关联 SelectCommand 属性指定的 SELECT 语句从数据源检索行。 与 SELECT 语句关联的连接对象必须有效,但不需要打开。 如果在调用 之前 Fill 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 Fill 处于打开状态,它将保持打开状态。

然后,该Fill操作会将行添加到 中DataSet的目标DataTable对象,如果它们尚不存在,DataTable则创建这些对象。 创建 DataTable 对象时, Fill 该操作通常只创建列名元数据。 但是,如果 属性 MissingSchemaAction 设置为 AddWithKey,也会创建适当的主键和约束。

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。DbDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。 其他结果集通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等) 来命名。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

方法Fill支持包含多个DataTable对象(其名称仅因大小写而异)的方案DataSet。 在这种情况下, Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配项,则会创建新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 调用 ,并且 DataSetDataTable 包含名称仅因大小写而异的 ,则会 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

可以在同一FillDataTable个 上多次使用 方法。 如果存在主键,传入的行将与已存在的匹配行合并。 如果不存在主键,传入行将追加到 。DataTable

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

注意

处理返回多个结果的批处理 SQL 语句时,.NET Framework数据提供程序的 FillFillSchema 的实现仅检索第一个结果的架构信息。

继承者说明

方法的Fill(DataSet)此重载受到保护,设计为供.NET Framework数据提供程序使用。

另请参阅

适用于

Fill(DataTable[], Int32, Int32, IDbCommand, CommandBehavior)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataSet 的指定范围中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

protected:
 virtual int Fill(cli::array <System::Data::DataTable ^> ^ dataTables, int startRecord, int maxRecords, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual int Fill (System.Data.DataTable[] dataTables, int startRecord, int maxRecords, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.Fill : System.Data.DataTable[] * int * int * System.Data.IDbCommand * System.Data.CommandBehavior -> int
Protected Overridable Function Fill (dataTables As DataTable(), startRecord As Integer, maxRecords As Integer, command As IDbCommand, behavior As CommandBehavior) As Integer

参数

dataTables
DataTable[]

要从数据源填充的 DataTable 对象。

startRecord
Int32

从其开始的从零开始的记录号。

maxRecords
Int32

要检索的最大记录数。 指定 0 以检索开始记录后的所有记录。

command
IDbCommand

执行以填充 IDbCommand 对象的 DataTable

behavior
CommandBehavior

CommandBehavior 值之一。

返回

已在数据表中添加或刷新的行数。

例外

源表无效。

连接无效。

未能找到连接。

startRecord 参数小于 0。

maxRecords 参数小于 0。

注解

maxRecords如果值为 0,则获取在开始记录之后找到的所有记录。 如果 maxRecords 大于剩余行数,则仅返回剩余行,并且不会发出错误。

方法 Fill 使用 SELECT 语句从数据源检索数据。 与 IDbConnection SELECT 语句关联的对象必须有效,但不需要打开。 IDbConnection如果在调用 之前Fill关闭 ,则打开它以检索数据,然后关闭。 如果连接在调用 之前 Fill 处于打开状态,它将保持打开状态。

如果命令不返回任何行,则不会向 添加任何表, DataSet但不会引发异常。

如果 对象在 DbDataAdapter 填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。

当指定的查询返回多个结果时,每个结果集都放置在单独的表中。 其他结果集通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等) 来命名。 由于不会为不返回行的查询创建任何表,因此如果要处理插入查询后跟选择查询,则为 select 查询创建的表将命名为“Table”,因为它是创建的第一个表。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

方法Fill支持包含多个DataTable对象(其名称仅因大小写而异)的方案DataSet。 在这种情况下, Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配项,则会创建新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 调用 ,并且 DataSetDataTable 包含名称仅因大小写而异的 ,则会 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

如果在填充数据表时遇到错误或异常,则在发生错误之前添加的行将保留在数据表中。 操作的其余部分将中止。

当用于填充 DataTable 对象的 SELECT 语句返回多个结果(如批处理 SQL 语句)时,请注意以下事项:

  • 处理批处理 SQL 语句中的多个结果时, maxRecords 仅适用于第一个结果。 对于包含章化结果的行也是如此, (.NET Framework 仅) OLE DB 的数据访问接口。 顶级结果受 maxRecords限制,但会添加所有子行。

  • 如果其中一个结果包含错误,则会跳过所有后续结果。

注意

所包含的 DataSet 记录数不会超过 所 maxRecords指示的记录数。 但是,查询生成的整个结果集仍从服务器返回。

继承者说明

在派生类中重写 Fill(DataSet) 时,请务必调用基类的 Fill(DataSet) 方法。

另请参阅

适用于

Fill(DataSet, String, IDataReader, Int32, Int32)

DataSet 的指定范围中添加或刷新行以与使用 DataSetDataTableIDataReader 名称的数据源中的行进行匹配。

protected:
 virtual int Fill(System::Data::DataSet ^ dataSet, System::String ^ srcTable, System::Data::IDataReader ^ dataReader, int startRecord, int maxRecords);
protected virtual int Fill (System.Data.DataSet dataSet, string srcTable, System.Data.IDataReader dataReader, int startRecord, int maxRecords);
override this.Fill : System.Data.DataSet * string * System.Data.IDataReader * int * int -> int
Protected Overridable Function Fill (dataSet As DataSet, srcTable As String, dataReader As IDataReader, startRecord As Integer, maxRecords As Integer) As Integer

参数

dataSet
DataSet

要用记录和架构(如果必要)填充的 DataSet

srcTable
String

用于表映射的 DataTable 的名称。

dataReader
IDataReader

IDataReader 的名称。

startRecord
Int32

从其开始的从零开始的记录号。

maxRecords
Int32

要检索的最大记录数。 指定 0 以检索开始记录后的所有记录。

返回

已在 DataSet 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

例外

startRecord 小于 0。

maxRecords 小于 0。

注解

maxRecords如果值为 0,则获取在开始记录之后找到的所有记录。 如果 maxRecords 大于剩余行数,则仅返回剩余行,并且不会发出错误。

适用于

Fill(DataSet, Int32, Int32, String)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataSet 的指定范围中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

public:
 int Fill(System::Data::DataSet ^ dataSet, int startRecord, int maxRecords, System::String ^ srcTable);
public int Fill (System.Data.DataSet dataSet, int startRecord, int maxRecords, string srcTable);
override this.Fill : System.Data.DataSet * int * int * string -> int
Public Function Fill (dataSet As DataSet, startRecord As Integer, maxRecords As Integer, srcTable As String) As Integer

参数

dataSet
DataSet

要用记录和架构(如果必要)填充的 DataSet

startRecord
Int32

从其开始的从零开始的记录号。

maxRecords
Int32

要检索的最大记录数。 指定 0 以检索开始记录后的所有记录。

srcTable
String

用于表映射的源表的名称。

返回

已在 DataSet 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

例外

源表无效。

连接无效。

未能找到连接。

startRecord 参数小于 0。

maxRecords 参数小于 0。

示例

下面的示例使用派生类 OleDbDataAdapter,从 Categories 表中填充 DataSet 15 行,从第 10 行开始。 此示例假定已创建 OleDbDataAdapterDataSet

public void GetRecords()
{
    // ...
    // create dataSet and adapter
    // ...
    adapter.Fill(dataSet,9,15,"Categories");
}
Public Sub GetRecords()
    ' ...
    ' create dataSet and adapter
    ' ...
    adapter.Fill(dataSet, 9, 15, "Categories")
End Sub

注解

maxRecords如果值为 0,则获取在开始记录之后找到的所有记录。 如果 maxRecords 大于剩余行数,则仅返回剩余行,并且不会发出错误。

如果相应的 select 命令是返回多个结果的语句, FillmaxRecords 仅适用于第一个结果。

方法 Fill 使用 SELECT 语句从数据源检索数据。 与 IDbConnection SELECT 语句关联的对象必须有效,但不需要打开。 IDbConnection如果在调用 之前Fill关闭了 ,则会打开它以检索数据,然后关闭。 如果在调用 之前 Fill 连接处于打开状态,则连接将保持打开状态。

如果命令不返回任何行,则不会将表添加到 , DataSet但不会引发异常。

如果 对象在 DbDataAdapter 填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等为后续列生成名称。 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。

当指定的查询返回多个结果时,每个结果集都放置在单独的表中。 通过将整型值追加到指定的表名来命名其他结果集, (例如,“Table”、“Table1”、“Table2”等) 。 由于不会为不返回行的查询创建表,因此,如果处理插入查询后跟选择查询,则为选择查询创建的表名为“Table”,因为它是创建的第一个表。 如果应用使用列名和表名,请确保没有与这些命名模式冲突。

方法Fill支持包含多个DataTable对象的方案,DataSet这些对象的名称仅因大小写而异。 在这种情况下, Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配,则创建一个新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 调用 ,并且 DataSet 仅包含名称 DataTable 仅因大小写而异的 ,则会 DataTable 更新 。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

如果在填充数据表时遇到错误或异常,则在发生错误之前添加的行将保留在数据表中。 操作的其余部分将中止。

当用于填充 的 DataSet SELECT 语句返回多个结果(如批处理 SQL 语句)时,请注意以下事项:

  • 处理批处理 SQL 语句中的多个结果时, maxRecords 仅适用于第一个结果。 对于包含章化结果的行也是如此, (.NET Framework 仅) OLE DB 的数据访问接口。 顶级结果受 maxRecords限制,但会添加所有子行。

  • 如果其中一个结果包含错误,则跳过所有后续结果,并且不会添加到 。DataSet

使用后续 Fill 调用刷新 的内容 DataSet时,必须满足两个条件:

  1. SQL 语句应与最初用于填充 的 DataSet语句匹配。

  2. 密钥列信息必须存在。

如果存在主键信息,则将协调任何重复行,并且仅出现在对应于 的 DataSetDataTable一次。 可以通过 设置 FillSchema主键信息,方法是指定 PrimaryKeyDataTable属性,或者将 MissingSchemaAction 属性设置为 AddWithKey

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

注意

处理返回多个结果的批处理 SQL 语句时,.NET Framework Data Provider for OLE DB 的 FillSchema 实现仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill ,并将 MissingSchemaAction 设置为 AddWithKey

注意

所包含的 DataSet 记录数不会超过 所 maxRecords指示的记录数。 但是,查询生成的整个结果集仍从服务器返回。

继承者说明

在派生类中重写 Fill(DataSet) 时,请务必调用基类的 Fill(DataSet) 方法。

另请参阅

适用于

Fill(Int32, Int32, DataTable[])

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

添加或刷新一个或多个 DataTable 对象中的行,以匹配数据源中从指定记录开始并检索最多指定的最大记录数的行。

public:
 int Fill(int startRecord, int maxRecords, ... cli::array <System::Data::DataTable ^> ^ dataTables);
public int Fill (int startRecord, int maxRecords, params System.Data.DataTable[] dataTables);
override this.Fill : int * int * System.Data.DataTable[] -> int
Public Function Fill (startRecord As Integer, maxRecords As Integer, ParamArray dataTables As DataTable()) As Integer

参数

startRecord
Int32

从其开始的从零开始的记录号。

maxRecords
Int32

要检索的最大记录数。 指定 0 以检索开始记录后的所有记录。

dataTables
DataTable[]

要从数据源填充的 DataTable 对象。

返回

成功添加到对象或刷新对象中的 DataTable 行数。 此值不包括受不返回行的语句影响的行。

例外

dataTablesnull 或是空数组。

startRecord 小于 0。

maxRecords 小于 0。

注解

maxRecords如果值为 0,则获取在开始记录之后找到的所有记录。 如果 maxRecords 大于剩余行数,则仅返回剩余行,并且不会发出错误。

方法 Fill 使用关联 SelectCommand 属性指定的 SELECT 语句从数据源检索行。 与 SELECT 语句关联的连接对象必须有效,但不需要打开。 如果在调用 之前 Fill 关闭了连接,则会打开它以检索数据,然后关闭它。 如果连接在调用 之前 Fill 处于打开状态,它将保持打开状态。

然后,该Fill操作会将行添加到 中DataSet的目标DataTable对象,如果它们尚不存在,DataTable则创建这些对象。 创建 DataTable 对象时, Fill 该操作通常只创建列名元数据。 但是,如果 属性 MissingSchemaAction 设置为 AddWithKey,也会创建适当的主键和约束。

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

如果数据适配器在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等为后续列生成名称。 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到 时, DataSet每个结果集都放置在单独的表中。 其他结果集通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等) 来命名。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

当用于填充 DataSet 的 SELECT 语句返回多个结果(例如批处理 SQL 语句)时,如果其中一个结果包含错误,则跳过所有后续结果,并且不会添加到 。DataSet

可以在同一FillDataTable个 上多次使用 方法。 如果存在主键,传入的行将与已存在的匹配行合并。 如果不存在主键,传入行将追加到 。DataTable

注意

处理返回多个结果的批处理 SQL 语句时,针对 OLE DB .NET Framework数据提供程序的 实现FillSchema仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 FillMissingSchemaAction 并将 设置为 AddWithKey

另请参阅

适用于

Fill(DataTable)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataSet 的指定范围中添加或刷新行,以与使用 DataTable 名称的数据源中的行匹配。

public:
 int Fill(System::Data::DataTable ^ dataTable);
public int Fill (System.Data.DataTable dataTable);
override this.Fill : System.Data.DataTable -> int
Public Function Fill (dataTable As DataTable) As Integer

参数

dataTable
DataTable

用于表映射的 DataTable 的名称。

返回

已在 DataSet 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

例外

源表无效。

注解

方法 Fill 使用关联 SelectCommand 属性指定的 SELECT 语句从数据源检索行。 与 SELECT 语句关联的连接对象必须有效,但不需要打开。 如果在调用 之前 Fill 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 Fill 处于打开状态,它将保持打开状态。

然后,该Fill操作会将行添加到 中DataSet的目标DataTable对象,如果它们尚不存在,DataTable则创建这些对象。 创建 DataTable 对象时, Fill 该操作通常只创建列名元数据。 但是,如果 属性 MissingSchemaAction 设置为 AddWithKey,也会创建适当的主键和约束。

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。DbDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。

采用 作为参数的 DataTableFill重载仅获取第一个结果。 使用 的重载FillDataSet作为参数来获取多个结果。

方法Fill支持包含多个DataTable对象(其名称仅因大小写而异)的方案DataSet。 在这种情况下, Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配项,则会创建新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
 dataset.Tables.Add("aaa");  
 dataset.Tables.Add("AAA");  
 adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
    adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 调用 ,并且 DataSetDataTable 包含名称仅因大小写而异的 ,则会 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
 dataset.Tables.Add("aaa");  
    adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

可以在同一FillDataTable个 上多次使用 方法。 如果存在主键,传入的行将与已存在的匹配行合并。 如果不存在主键,传入行将追加到 。DataTable

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

注意

处理返回多个结果的批处理 SQL 语句时,.NET Framework数据提供程序的 FillFillSchema 的实现仅检索第一个结果的架构信息。

继承者说明

方法的Fill(DataSet)此重载受到保护,设计为供.NET Framework数据提供程序使用。

另请参阅

适用于

Fill(DataTable, IDataReader)

DataTable 中添加或刷新行,以与使用指定的 DataTableIDataReader 名称的数据源中的行匹配。

protected:
 virtual int Fill(System::Data::DataTable ^ dataTable, System::Data::IDataReader ^ dataReader);
protected virtual int Fill (System.Data.DataTable dataTable, System.Data.IDataReader dataReader);
override this.Fill : System.Data.DataTable * System.Data.IDataReader -> int
Protected Overridable Function Fill (dataTable As DataTable, dataReader As IDataReader) As Integer

参数

dataTable
DataTable

要用记录和架构(如果必要)填充的 DataTable

dataReader
IDataReader

IDataReader 的名称。

返回

已在 DataTable 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

适用于

Fill(DataSet, String)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataSet 中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

public:
 int Fill(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
public int Fill (System.Data.DataSet dataSet, string srcTable);
override this.Fill : System.Data.DataSet * string -> int
Public Function Fill (dataSet As DataSet, srcTable As String) As Integer

参数

dataSet
DataSet

要用记录和架构(如果必要)填充的 DataSet

srcTable
String

用于表映射的源表的名称。

返回

已在 DataSet 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

例外

源表无效。

示例

以下示例使用派生类 OleDbDataAdapter来填充 DataSet 类别表中的行。 此示例假定你已创建 OleDbDataAdapterDataSet

public void GetRecords()
{
    // ...
    // create dataSet and adapter
    // ...
    adapter.Fill(dataSet, "Categories");
}
Public Sub GetRecords()
    ' ...
    ' create dataSet and adapter
    ' ...
    adapter.Fill(dataSet, "Categories")
End Sub

注解

方法 Fill 使用 SELECT 语句从数据源检索数据。 与 IDbConnection select 命令关联的对象必须有效,但不需要打开。 IDbConnection如果在调用 之前Fill关闭 ,则打开它以检索数据,然后关闭。 如果连接在调用 之前 Fill 处于打开状态,它将保持打开状态。

如果命令不返回任何行,则不会向 DataSet添加任何表,并且不会引发异常。

如果对象在 DbDataAdapter 填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等为后续列生成名称。 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。

当指定的查询返回多个结果时,每个结果集都放置在单独的表中。 其他结果集通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等) 来命名。 由于不会为不返回行的查询创建任何表,因此如果要处理插入查询后跟选择查询,则为 select 查询创建的表将命名为“Table”,因为它是创建的第一个表。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

方法Fill支持包含多个DataTable对象(其名称仅因大小写而异)的方案DataSet。 在这种情况下, Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配项,则会创建新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 调用 ,并且 DataSetDataTable 包含名称仅因大小写而异的 ,则会 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

如果在填充数据表时遇到错误或异常,则在发生错误之前添加的行将保留在数据表中。 操作的其余部分已中止。

当用于填充 的 DataSet SELECT 语句返回多个结果(例如批处理 SQL 语句)时,请注意以下事项:

  • 如果其中一个结果包含错误,则跳过所有后续结果,并且不会添加到 。DataSet

使用后续 Fill 调用刷新 的内容 DataSet时,必须满足两个条件:

  1. SQL 语句应与最初用于填充 的 DataSet语句匹配。

  2. 密钥 列信息 必须存在。 如果存在主键信息,则会协调任何重复行,并且仅在 对应于 的 DataSetDataTable显示一次。 可以通过 ,通过指定 的 属性DataTable或将 属性设置为 AddWithKeyMissingSchemaAction 来设置FillSchema主键PrimaryKey信息。

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

注意

处理返回多个结果的批处理 SQL 语句时,.NET Framework Data Provider for OLE DB 的 FillSchema 实现仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill ,并将 MissingSchemaAction 设置为 AddWithKey

继承者说明

在派生类中重写 Fill(DataSet) 时,请务必调用基类的 Fill(DataSet) 方法。

另请参阅

适用于

Fill(DataSet)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataSet 中添加或刷新行。

public:
 override int Fill(System::Data::DataSet ^ dataSet);
public override int Fill (System.Data.DataSet dataSet);
override this.Fill : System.Data.DataSet -> int
Public Overrides Function Fill (dataSet As DataSet) As Integer

参数

dataSet
DataSet

要用记录和架构(如果必要)填充的 DataSet

返回

已在 DataSet 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

实现

注解

方法 Fill 使用 SELECT 语句从数据源检索数据。 与 IDbConnection select 命令关联的对象必须有效,但不需要打开。 IDbConnection如果在调用 之前Fill关闭了 ,则会打开它以检索数据,然后关闭。 如果在调用 之前 Fill 连接处于打开状态,则连接将保持打开状态。

如果在填充数据表时遇到错误或异常,则在发生错误之前添加的行将保留在数据表中。 操作的其余部分将中止。

如果命令不返回任何行,则不会向 DataSet中添加任何表,并且不会引发异常。

如果 对象在 DbDataAdapter 填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等为后续列生成名称。 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。

当指定的查询返回多个结果时,返回查询的每一行的结果集将放置在单独的表中。 通过将整型值追加到指定的表名来命名其他结果集, (例如,“Table”、“Table1”、“Table2”等) 。 由于不会为不返回行的查询创建表,因此,如果先处理插入查询,后跟选择查询,则为选择查询创建的表名为“Table”,因为它是创建的第一个表。 如果应用使用列名和表名,请确保没有与这些命名模式冲突。

当用于填充 DataSet 的 SELECT 语句返回多个结果(如批处理 SQL 语句)时,如果其中一个结果包含错误,则会跳过所有后续结果,并且不会添加到 。DataSet

使用后续 Fill 调用刷新 的内容 DataSet时,必须满足两个条件:

  1. SQL 语句应与最初用于填充 的 DataSet语句匹配。

  2. 密钥列信息必须存在。

如果存在主键信息,则会协调任何重复行,并且仅在对应于 的 DataSetDataTable出现一次。 可以通过 设置 FillSchema主键信息,方法是指定 PrimaryKeyDataTable属性,或者将 MissingSchemaAction 属性设置为 AddWithKey

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

注意

处理返回多个结果的批处理 SQL 语句时,.NET Framework Data Provider for OLE DB 的 FillSchema 实现仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill ,并将 MissingSchemaAction 设置为 AddWithKey

另请参阅

适用于

Fill(DataTable, IDbCommand, CommandBehavior)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataTable 中添加或刷新行,以与使用指定的 DataTableIDbCommandCommandBehavior 的数据源中的行匹配。

protected:
 virtual int Fill(System::Data::DataTable ^ dataTable, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual int Fill (System.Data.DataTable dataTable, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.Fill : System.Data.DataTable * System.Data.IDbCommand * System.Data.CommandBehavior -> int
Protected Overridable Function Fill (dataTable As DataTable, command As IDbCommand, behavior As CommandBehavior) As Integer

参数

dataTable
DataTable

要用记录和架构(如果必要)填充的 DataTable

command
IDbCommand

用于从数据源中检索行的 SQL SELECT 语句。

behavior
CommandBehavior

CommandBehavior 值之一。

返回

已在 DataTable 中成功添加或刷新的行数。 这不包括受不返回行的语句影响的行。

注解

方法 Fill 使用关联 SelectCommand 属性指定的 SELECT 语句从数据源中检索行。 与 SELECT 语句关联的连接对象必须有效,但不需要打开。 如果在调用 之前 Fill 关闭了连接,则会将其打开以检索数据,然后关闭。 如果在调用 之前 Fill 连接处于打开状态,则连接将保持打开状态。

然后,该Fill操作将行添加到 中的DataSet指定目标DataTable对象,如果对象尚不存在,则创建DataTable该对象。 创建 DataTable 对象时, Fill 操作通常只创建列名元数据。 但是,如果 属性 MissingSchemaAction 设置为 AddWithKey,也会创建相应的主键和约束。

如果 对象在 DbDataAdapter 填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等为后续列生成名称。 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。

采用 DataTable 作为参数的 的Fill重载仅获取第一个结果。 使用 的重载FillDataSet作为参数来获取多个结果。

可以在同一 DataTable个 上多次使用 Fill 方法。 如果主键存在,传入的行将与已经存在的匹配行合并。 如果不存在主键,传入行将追加到 。DataTable

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 PrimaryKey 设置 DataTable值。 必须显式定义主键,以确保正确解析重复行。 有关详细信息,请参阅定义主键

注意

处理返回多个结果的批处理 SQL 语句时,.NET Framework Data Provider for OLE DB 的 FillSchema 实现仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill ,并将 MissingSchemaAction 设置为 AddWithKey

继承者说明

方法的Fill(DataSet)此重载受到保护,设计为供.NET Framework数据提供程序使用。

另请参阅

适用于