OleDbDataAdapter.Fill Método

Definição

Adiciona ou atualiza linhas no DataSet para corresponder às de um ADO Recordset ou Record objeto.

Sobrecargas

Name Description
Fill(DataTable, Object)

Adiciona ou atualiza linhas em a DataTable para corresponder às de um ADO Recordset ou Record objeto usando os objetos especificados DataTable e ADO.

Fill(DataSet, Object, String)

Adiciona ou atualiza linhas no DataSet para corresponder às de um ADO Recordset ou Record objeto usando o especificado DataSet, objeto ADO e nome da tabela de origem.

Fill(DataTable, Object)

Adiciona ou atualiza linhas em a DataTable para corresponder às de um ADO Recordset ou Record objeto usando os objetos especificados DataTable e ADO.

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

Parâmetros

dataTable
DataTable

A DataTable para preencher com registos e, se necessário, esquema.

ADODBRecordSet
Object

Um ADO Recordset ou Record objeto.

Devoluções

O número de linhas atualizado com sucesso para o DataTable. Isto não inclui linhas afetadas por instruções que não retornam linhas.

Observações

A ligação entre ActiveX Data Objects (ADO) e ADO.NET é uma operação unidirecional, podendo copiar dados do ADO para o DataSet, mas quaisquer atualizações dos dados devem ser tratadas pelo ADO.NET.

Esta sobrecarga do Fill método não fecha a entrada Recordset após a conclusão da Fill operação.

Ao lidar com instruções SQL em lote que retornam múltiplos resultados, esta implementação de Fill e FillSchema para o Framework OLE DB.NET Data Provider recupera informação de esquema apenas para o primeiro resultado.

A Fill operação adiciona as linhas ao objeto de destino DataTable especificado no DataSet, criando o DataTable objeto se este ainda não existir. Quando cria um DataTable objeto, a Fill operação normalmente gera apenas metadados do nome das colunas. No entanto, se a MissingSchemaAction propriedade for definida para AddWithKey, também são criadas chaves primárias e restrições apropriadas.

Pode usar o Fill método várias vezes no mesmo DataTable. Se existir uma chave primária, as linhas de entrada são fundidas com as linhas correspondentes que já existem. Se não existir uma chave primária, as linhas de entrada são adicionadas ao DataTable. Se a informação da chave primária estiver presente, quaisquer linhas duplicadas são reconciliadas e só aparecem uma vez no DataTable que corresponde ao DataSet. A informação da chave primária pode ser definida através FillSchemade , especificando a PrimaryKey propriedade do DataTable, ou definindo a MissingSchemaAction propriedade para AddWithKey.

Se o SelectCommand retorna os resultados de um OUTER JOIN, o DataAdapter não define um PrimaryKey valor para o resultado DataTable. Deve definir explicitamente a chave primária para garantir que as linhas duplicadas são resolvidas corretamente. Para obter mais informações, consulte Definindo chaves primárias.

Para funcionar corretamente com o Data Provider .NET Framework para OLE DB, AddWithKey requer que o fornecedor nativo de OLE DB obtenha a informação de chave primária necessária definindo a propriedade DBPROP_UNIQUEROWS e depois determine quais as colunas principais primárias examinando DBCOLUMN_KEYCOLUMN no IColumnsRowset. Alternativamente, o utilizador pode definir explicitamente as restrições da chave primária em cada DataTable. Isto garante que os registos recebidos que correspondem aos registos existentes são atualizados em vez de anexados.

Se encontrar OleDbDataAdapter colunas duplicadas ao preencher um DataTable, gera nomes para as colunas seguintes, usando o padrão "nome da coluna1", "nome da coluna2", "nome da coluna3", e assim sucessivamente. Os nomes das colunas vazias são adicionados ao DataTable, usando uma cadeia vazia para a primeira coluna, seguida por "1", "2", "3", e assim sucessivamente para as colunas vazias subsequentes.

Os valores em ADO Recordset ou Record objetos são convertidos para tipos de runtime de linguagem comum para armazenamento no DataSetarquivo .

Caution

Esta sobrecarga do Fill método não invoca Close implicitamente o objeto ADO quando a operação de preenchimento está concluída. Por isso, liga Close sempre quando terminares de usar ADO Recordset ou Record objetos. Isto garante que a ligação subjacente a uma fonte de dados é libertada de forma atempada e também previne possíveis violações de acesso devido a objetos ADO não geridos serem recuperados por recolha de lixo quando as referências existentes ainda existem.

Quando chamas o TableMappings.Add método em a DataAdapter e mapeias explicitamente o parâmetro da tabela de origem para uma string vazia, o conjunto de dados é preenchido com sucesso usando a tabela de origem, mas o conjunto de dados será preenchido sem nada. Por exemplo, no exemplo seguinte, rDataSet será povoado com nada.

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

Este exemplo mostra como pode saltar um resultado ao lidar com múltiplos resultados.

O exemplo seguinte usa um OleDbDataAdapter para preencher a DataTable usando um ADO Recordset. Este exemplo assume que criou um 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();

Ver também

Aplica-se a

Fill(DataSet, Object, String)

Adiciona ou atualiza linhas no DataSet para corresponder às de um ADO Recordset ou Record objeto usando o especificado DataSet, objeto ADO e nome da tabela de origem.

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

Parâmetros

dataSet
DataSet

A DataSet para preencher com registos e, se necessário, esquema.

ADODBRecordSet
Object

Um ADO Recordset ou Record objeto.

srcTable
String

A tabela de origem usada para os mapeamentos das tabelas.

Devoluções

O número de linhas adicionadas ou atualizadas com sucesso no DataSet. Isto não inclui linhas afetadas por instruções que não retornam linhas.

Exceções

A tabela de origem é inválida.

Observações

A ligação entre ActiveX Data Objects (ADO) e ADO.NET é uma operação unidirecional, podendo copiar dados do ADO para o DataSet, mas quaisquer atualizações dos dados devem ser tratadas pelo ADO.NET.

O Fill método itera através de múltiplos resultados chamando o NextRecordset método no Recordset, fechando a entrada Recordset após a conclusão da Fill operação.

A Fill operação adiciona as linhas ao objeto de destino DataTable especificado no DataSet, criando o DataTable objeto se este ainda não existir. Quando cria um DataTable objeto, a Fill operação normalmente gera apenas metadados do nome das colunas. No entanto, se a MissingSchemaAction propriedade for definida para AddWithKey, também são criadas chaves primárias e restrições apropriadas.

Se a informação da chave primária estiver presente, quaisquer linhas duplicadas são reconciliadas e só aparecem uma vez no DataTable que corresponde ao DataSet. A informação da chave primária pode ser definida através FillSchemade , especificando a PrimaryKey propriedade do DataTable, ou definindo a MissingSchemaAction propriedade para AddWithKey.

Para funcionar corretamente com o .NET Framework Data Provider para OLE DB, AddWithKey requer que o fornecedor nativo do OLE DB obtenha a informação de chave primária necessária definindo a propriedade DBPROP_UNIQUEROWS, e depois determine quais as colunas principais primárias examinando DBCOLUMN_KEYCOLUMN no IColumnsRowset. Alternativamente, o utilizador pode definir explicitamente as restrições da chave primária em cada DataTable. Isto garante que os registos recebidos que correspondem aos registos existentes são atualizados em vez de anexados.

Se o SelectCommand retorna os resultados de um OUTER JOIN, o DataAdapter não define um PrimaryKey valor para o resultado DataTable. Deve definir explicitamente a chave primária para garantir que as linhas duplicadas são resolvidas corretamente. Para obter mais informações, consulte Definindo chaves primárias.

Se o Recordset for fechado antes do início da Fill operação, não resulta erro. Isto é necessário para o tratamento de múltiplos resultados, porque as consultas que não retornam linhas são indicadas por um arquivo fechado Recordset. Ele OleDbDataAdapter simplesmente liga NextRecordset para o encerrado Recordset e continua a processar.

Se for encontrado um erro durante o preenchimento do conjunto de dados, as linhas adicionadas antes da ocorrência do erro permanecem no DataSet. O resto da operação é abortado.

Se o DbDataAdapter objeto encontrar colunas duplicadas enquanto preenche um DataTable, gera nomes para as colunas seguintes, usando o padrão "nome da coluna1", "nome da coluna2", "nome da coluna3", e assim sucessivamente. Se os dados recebidos contêm colunas sem nome, são colocadas segundo DataSet o padrão "Coluna 1", "Coluna 2", e assim sucessivamente. Quando vários conjuntos de resultados são adicionados, DataSet cada conjunto de resultados é colocado numa tabela separada. Conjuntos de resultados adicionais são nomeados adicionando valores integrais ao nome da tabela especificado (por exemplo, "Table", "Table1", "Table2", entre outros). Aplicações que utilizam nomes de colunas e tabelas devem garantir que não ocorram conflitos com esses padrões de nomenclatura.

Os valores em ADO Recordset ou Record objetos são convertidos para tipos de runtime de linguagem comum para armazenamento no DataSetarquivo .

Note

Esta sobrecarga do Fill método invoca Close implicitamente o objeto ADO quando a operação de preenchimento está concluída.

O exemplo seguinte usa um OleDbDataAdapter para preencher um DataSet usando um ADO Recordset que é um objeto ADO Record . Este exemplo assume que criou um ADO RecordSet e Record um objeto.

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

Ver também

Aplica-se a