OleDbDataAdapter.Fill 方法

定义

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

重载

名称 说明
Fill(DataTable, Object)

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

Fill(DataSet, Object, String)

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

Fill(DataTable, Object)

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

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

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 RecordsetRecord 对象。

返回

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

注解

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

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

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

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

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

如果 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 RecordsetRecord 对象中的值将转换为用于存储的公共 DataSet语言运行时类型。

Caution

完成填充操作时,该方法的 Fill 此重载不会隐式调用 Close ADO 对象。 因此,使用 ADO CloseRecordset对象完成后,请始终调用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 RecordsetRecord对象中的行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 RecordsetRecord 对象。

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一次。 主键信息可以通过指定属性或将属性设置为 来设置FillSchemaPrimaryKeyDataTableMissingSchemaActionAddWithKey

若要正确使用 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 RecordsetRecord 对象中的值将转换为用于存储的公共 DataSet语言运行时类型。

注释

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

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

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();

另请参阅

适用于