OleDbDataAdapter.Fill Método

Definição

Adiciona ou atualiza linhas para corresponder a DataSet elas em um ADO Recordset ou Record objeto.

Sobrecargas

Nome Description
Fill(DataTable, Object)

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

Fill(DataSet, Object, String)

Adiciona ou atualiza linhas para corresponder a DataSet elas em um ADO Recordset ou Record objeto usando o objeto ADO e o nome da tabela de origem especificados DataSet.

Fill(DataTable, Object)

Adiciona ou atualiza linhas em um DataTable para corresponder a elas em um ADO Recordset ou Record objeto usando os objetos especificados DataTable e do 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

Um DataTable para preencher com registros e, se for necessário, esquema.

ADODBRecordSet
Object

Um objeto ou Record ADORecordset.

Retornos

O número de linhas atualizadas com êxito para o DataTable. Isso não inclui linhas afetadas por instruções que não retornam linhas.

Comentários

O link entre o ADO (ActiveX Data Objects) e o ADO.NET é uma operação unidirecional na qual você pode copiar dados do ADO para o DataSet, mas todas as atualizações para os dados devem ser tratadas pelo ADO.NET.

Essa 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 vários resultados, essa implementação de Fill e FillSchema para o OLE DB.NET Framework Provedor de Dados recupera informações 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 ele ainda não existir. Quando você cria um DataTable objeto, a Fill operação normalmente cria apenas metadados de nome de coluna. No entanto, se a MissingSchemaAction propriedade estiver definida como AddWithKey, as chaves primárias e as restrições apropriadas também serão criadas.

Você pode usar o Fill método várias vezes no mesmo DataTable. Se existir uma chave primária, as linhas de entrada serão mescladas com linhas correspondentes que já existem. Se nenhuma chave primária existir, as linhas de entrada serão acrescentadas ao DataTable. Se as informações da chave primária estiverem presentes, todas as linhas duplicadas serão reconciliadas e aparecerão apenas uma vez no DataTable que corresponde ao DataSet. As informações da chave primária podem ser definidas por meio FillSchemada especificação da propriedade do PrimaryKey, ou definindo DataTable a MissingSchemaAction propriedade como AddWithKey.

Se o SelectCommand retornar os resultados de um OUTER JOIN, o DataAdapter não definirá um valor de PrimaryKey para oDataTable resultante. Você deve definir explicitamente a chave primária para garantir que as linhas duplicadas sejam resolvidas corretamente. Para obter mais informações, consulte Definindo chaves primárias.

Para funcionar corretamente com o Provedor de Dados .NET Framework para OLE DB, AddWithKey requer que o provedor OLE DB nativo obtenha informações de chave primária necessárias definindo a propriedade DBPROP_UNIQUEROWS e, em seguida, determina quais colunas são colunas de chave primária examinando DBCOLUMN_KEYCOLUMN no IColumnsRowset. Como alternativa, o usuário pode definir explicitamente as restrições de chave primária em cada DataTable. Isso garante que os registros de entrada que correspondem aos registros existentes sejam atualizados em vez de acrescentados.

Se encontrar OleDbDataAdapter colunas duplicadas ao preencher uma DataTable, ela gerará nomes para as colunas subsequentes, usando o padrão "columnname1", "columnname2", "columnname3" e assim por diante. Nomes de colunas vazias são adicionados ao DataTable, usando uma cadeia de caracteres vazia para a primeira coluna, seguido por "1", "2", "3" e assim por diante para as colunas vazias subsequentes.

Os valores em ADO Recordset ou Record objetos são convertidos em tipos de common language runtime para armazenamento no DataSet.

Caution

Essa sobrecarga do Fill método não chama Close implicitamente o objeto ADO quando a operação de preenchimento é concluída. Portanto, sempre chame Close quando terminar de usar o ADO Recordset ou Record objetos. Isso garante que a conexão subjacente a uma fonte de dados seja liberada em tempo hábil e também impeça possíveis violações de acesso devido a objetos ADO não gerenciados serem recuperados pela coleta de lixo quando as referências existentes ainda existirem.

Quando você chama o TableMappings.Add método em um DataAdapter e mapeia explicitamente o parâmetro de tabela de origem para uma cadeia de caracteres vazia, o conjunto de dados é preenchido com êxito usando a tabela de origem, mas o conjunto de dados será preenchido sem nada. Por exemplo, no exemplo a seguir, rDataSet será preenchido sem nada.

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

Este exemplo mostra como você pode ignorar um resultado ao lidar com vários resultados.

O exemplo a seguir usa um OleDbDataAdapter para preencher um DataTable usando um ADO Recordset. Este exemplo pressupõe que você 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();

Confira também

Aplica-se a

Fill(DataSet, Object, String)

Adiciona ou atualiza linhas para corresponder a DataSet elas em um ADO Recordset ou Record objeto usando o objeto ADO e o nome da tabela de origem especificados 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

Parâmetros

dataSet
DataSet

Um DataSet para preencher com registros e, se for necessário, esquema.

ADODBRecordSet
Object

Um objeto ou Record ADORecordset.

srcTable
String

A tabela de origem usada para os mapeamentos de tabela.

Retornos

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

Exceções

A tabela de origem é inválida.

Comentários

O link entre o ADO (ActiveX Data Objects) e o ADO.NET é uma operação unidirecional na qual você pode copiar dados do ADO para o DataSet, mas todas as atualizações para os dados devem ser tratadas pelo ADO.NET.

O Fill método itera por meio de vários 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 ele ainda não existir. Quando você cria um DataTable objeto, a Fill operação normalmente cria apenas metadados de nome de coluna. No entanto, se a MissingSchemaAction propriedade estiver definida como AddWithKey, as chaves primárias e as restrições apropriadas também serão criadas.

Se as informações da chave primária estiverem presentes, todas as linhas duplicadas serão reconciliadas e aparecerão apenas uma vez no DataTable que corresponde ao DataSet. As informações da chave primária podem ser definidas por meio FillSchemada especificação da propriedade do PrimaryKey, ou definindo DataTable a MissingSchemaAction propriedade como AddWithKey.

Para funcionar corretamente com o .NET Framework Provedor de Dados para OLE DB, AddWithKey requer que o provedor OLE DB nativo obtenha informações de chave primária necessárias definindo a propriedade DBPROP_UNIQUEROWS e, em seguida, determine quais colunas são colunas de chave primária examinando DBCOLUMN_KEYCOLUMN no IColumnsRowset. Como alternativa, o usuário pode definir explicitamente as restrições de chave primária em cada DataTable. Isso garante que os registros de entrada que correspondem aos registros existentes sejam atualizados em vez de acrescentados.

Se o SelectCommand retornar os resultados de um OUTER JOIN, o DataAdapter não definirá um valor de PrimaryKey para oDataTable resultante. Você deve definir explicitamente a chave primária para garantir que as linhas duplicadas sejam resolvidas corretamente. Para obter mais informações, consulte Definindo chaves primárias.

Se for Recordset fechado antes do início da operação, nenhum resultado de Fill erro. Isso é necessário para lidar com vários resultados, pois as consultas que não retornam linhas são indicadas por um fechado Recordset. O OleDbDataAdapter just chama NextRecordset o fechado Recordset e continua o processamento.

Se um erro for encontrado ao preencher o conjunto de dados, as linhas adicionadas antes da ocorrência do erro permanecerão no DataSet. O restante da operação foi anulada.

Se o DbDataAdapter objeto encontrar colunas duplicadas ao preencher uma DataTable, ele gerará nomes para as colunas subsequentes, usando o padrão "columnname1", "columnname2", "columnname3" e assim por diante. Se os dados de entrada contiverem colunas sem nome, eles serão colocados de acordo com o DataSet padrão "Column1", "Column2" e assim por diante. Quando vários conjuntos de resultados são adicionados a DataSet cada conjunto de resultados é colocado em uma tabela separada. Conjuntos de resultados adicionais são nomeados acrescentando valores integrais ao nome da tabela especificado (por exemplo, "Tabela", "Tabela1", "Tabela2" e assim por diante.). Os aplicativos que usam nomes de coluna e tabela devem garantir que conflitos com esses padrões de nomenclatura não ocorram.

Os valores em ADO Recordset ou Record objetos são convertidos em tipos de common language runtime para armazenamento no DataSet.

Note

Essa sobrecarga do Fill método chama Close implicitamente o objeto ADO quando a operação de preenchimento é concluída.

O exemplo a seguir usa um OleDbDataAdapter para preencher um DataSet ADO usando um objeto ADO RecordsetRecord . Este exemplo pressupõe que você 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();

Confira também

Aplica-se a