语言

OleDbDataAdapter.Fill 方法

定义

在 ADO DataSet 或Recordset对象中添加或刷新行Record以匹配这些行。

重载

名称 说明
Fill(DataTable, Object)

使用指定的DataTable和 ADO 对象添加或刷新 ADO Recordset 中的行以匹配 ADO Record 或DataTable对象中的行。

Fill(DataSet, Object, String)

使用指定的 DataSetADO 对象和源表名称添加或刷新行以匹配 ADO Recordset 或Record对象中的行DataSet。

Fill(DataTable, Object)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

使用指定的DataTable和 ADO 对象添加或刷新 ADO Recordset 中的行以匹配 ADO Record 或DataTable对象中的行。

public:
 int Fill(System::Data::DataTable ^ dataTable, System::Object ^ ADODBRecordSet);
public int Fill(System.Data.DataTable dataTable, object ADODBRecordSet);
override this.Fill : System.Data.DataTable * obj -> int
Public Function Fill (dataTable As DataTable, ADODBRecordSet As Object) As Integer

参数

dataTable
DataTable

用于填充记录的 A DataTable ,如果需要,则为架构。

ADODBRecordSet
Object

ADO Recordset 或 Record 对象。

返回

已成功刷新到的 DataTable行数。 这不包括受不返回行的语句影响的行。

注解

ActiveX 数据对象(ADO)和 ADO 之间的链接.NET是一种单向操作,你可以将数据从 ADO 复制到 DataSet,但必须由 ADO 处理对数据的任何更新.NET。

此方法的Fill此重载不会在操作完成Recordset时关闭输入Fill。

处理返回多个结果的批处理 SQL 语句时,OLE DB 的 Fill 和 FillSchema 的此实现.NET Framework Data Provider仅检索第一个结果的架构信息。

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

可以在 Fill 同一 DataTable个方法上使用多次。 如果主键存在,则传入的行与已存在的匹配行合并。 如果不存在主键,则传入行将追加到 .DataTable 如果存在主键信息,则会协调任何重复行,并且只出现在对应于该DataTable行的DataSet一次。 主键信息可以通过指定属性或将属性设置为 来设置FillSchemaPrimaryKey。DataTableMissingSchemaActionAddWithKey

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

若要正确使用 OLE DB 的 .NET Framework Data Provider,AddWithKey要求本机 OLE DB 访问接口通过设置 DBPROP_UNIQUEROWS 属性获取所需的主键信息,然后通过检查 IColumnsRowset 中的DBCOLUMN_KEYCOLUMN来确定哪些列是主键列。 或者,用户可以为每个用户显式设置主键约束 DataTable。 这可确保更新与现有记录匹配的传入记录,而不是追加。

如果在填充 a OleDbDataAdapter时遇到重复列,则会使用模式“DataTable2”、“columnname3”等生成后续列的名称。 空列名称将添加到 DataTable第一列的空字符串中,后跟“1”、“2”、“3”等后续空列。

ADO Recordset 或 Record 对象中的值将转换为用于存储的公共 DataSet语言运行时类型。

Caution

完成填充操作时,该方法的 Fill 此重载不会隐式调用 Close ADO 对象。 因此,使用 ADO Close 或Recordset对象完成后,请始终调用Record。 这可确保及时释放与数据源的基础连接,并防止由于现有引用仍然存在时被垃圾回收回收的非托管 ADO 对象而可能的访问冲突。

在某个TableMappings.Add方法上调用DataAdapter该方法并将源表参数显式映射到空字符串时,将使用源表成功填充数据集,但数据集将不填充任何内容。 例如,在以下示例中, rDataSet 将填充无任何内容。

rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");

此示例演示如何在处理多个结果时跳过结果。

以下示例使用 ADO OleDbDataAdapterDataTable填充 。Recordset 此示例假定已创建 ADO Recordset。

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     Dim custTable As DataTable = New DataTable("Customers")
     custTable.Columns.Add("CustomerID", Type.GetType("System.String"))
     custTable.Columns.Add("CompanyName", Type.GetType("System.String"))
     custDS.Tables.Add(custTable)
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custTable, adoRS)
     adoRS.Close()
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     DataTable custTable = new DataTable("Customers");
     custTable.Columns.Add("CustomerID", typeof(String));
     custTable.Columns.Add("CompanyName", typeof(String));
     custDS.Tables.Add(custTable);
     //Use ADO objects from ADO library (msado15.dll) imported
     //  as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custTable, adoRS);
     adoRS.Close();
     adoConn.Close();

另请参阅

适用于

Fill(DataSet, Object, String)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

使用指定的 DataSetADO 对象和源表名称添加或刷新行以匹配 ADO Recordset 或Record对象中的行DataSet。

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

参数

dataSet
DataSet

用于填充记录的 A DataSet ,如果需要,则为架构。

ADODBRecordSet
Object

ADO Recordset 或 Record 对象。

srcTable
String

用于表映射的源表。

返回

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

例外

源表无效。

注解

ActiveX 数据对象(ADO)和 ADO 之间的链接.NET是一种单向操作,你可以将数据从 ADO 复制到 DataSet,但必须由 ADO 处理对数据的任何更新.NET。

该方法Fill通过在操作完成NextRecordset时关闭RecordsetRecordset输入Fill来循环访问多个结果。

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

如果存在主键信息,则会协调任何重复行,并且只出现在对应于该DataTable行的DataSet一次。 主键信息可以通过指定属性或将属性设置为 来设置FillSchemaPrimaryKey。DataTableMissingSchemaActionAddWithKey

若要正确使用 OLE DB 的 .NET Framework Data Provider,AddWithKey需要本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性来获取所需的主键信息,然后通过检查 IColumnsRowset 中的DBCOLUMN_KEYCOLUMN来确定哪些列是主键列。 或者,用户可以为每个用户显式设置主键约束 DataTable。 这可确保更新与现有记录匹配的传入记录,而不是追加。

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

Recordset如果在操作开始Fill前关闭,则不会导致错误。 这是处理多个结果所必需的,因为不返回行的查询由关闭 Recordset的指示。 OleDbDataAdapter对已关闭NextRecordset的调用Recordset并继续处理。

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

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

ADO Recordset 或 Record 对象中的值将转换为用于存储的公共 DataSet语言运行时类型。

注释

填充操作完成后,该方法的此重载 Fill 会隐式调用 Close ADO 对象。

下面的示例使用 ADO OleDbDataAdapter 对象填充 DataSet ADO RecordsetRecord 。 此示例假定已创建 ADO RecordSet 和 Record 对象。

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custDS, adoRS, "Customers")
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     //Use ADO objects from ADO library (msado15.dll) imported
     // as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custDS, adoRS, "Customers");
     adoConn.Close();

另请参阅

适用于