OleDbDataAdapter.Fill 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在 ADO DataSet 或Recordset对象中添加或刷新行Record以匹配这些行。
重载
| 名称 | 说明 |
|---|---|
| Fill(DataTable, Object) |
使用指定的DataTable和 ADO 对象添加或刷新 ADO |
| Fill(DataSet, Object, String) |
使用指定的 DataSetADO 对象和源表名称添加或刷新行以匹配 ADO |
Fill(DataTable, Object)
- Source:
- OleDbDataAdapter.cs
- Source:
- OleDbDataAdapter.cs
- Source:
- OleDbDataAdapter.cs
- Source:
- OleDbDataAdapter.cs
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
参数
- 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
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
参数
- 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();