Compartilhar via


OleDbDataAdapter.Fill Método

Definição

Adiciona ou atualiza linhas no DataSet para corresponder àquelas em um objeto ADO Recordset ou Record.

Sobrecargas

Fill(DataTable, Object)

Adiciona ou atualiza linhas em um DataTable para que elas correspondam às linhas em um objeto Recordset ou Record ADO usando o DataTable especificado e objetos ADO.

Fill(DataSet, Object, String)

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

Fill(DataTable, Object)

Origem:
OleDbDataAdapter.cs
Origem:
OleDbDataAdapter.cs
Origem:
OleDbDataAdapter.cs

Adiciona ou atualiza linhas em um DataTable para que elas correspondam às linhas em um objeto Recordset ou Record ADO usando o DataTable especificado e objetos 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 a ser preenchido com registros e, se necessário, com o esquema.

ADODBRecordSet
Object

Um objeto Recordset ou Record ADO.

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 dos dados devem ser tratadas por ADO.NET.

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

Ao manipular instruções SQL em lote que retornam vários resultados, essa implementação de e FillSchema para o Provedor de Fill Dados do OLE DB.NET Framework 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, caso a propriedade MissingSchemaAction seja definida como AddWithKey, as chaves primárias apropriadas e as restrições também são criadas.

Você pode usar o Fill método várias vezes no mesmo DataTable. Caso haja uma chave primária, as linhas de entrada são mescladas com linhas correspondentes já existentes. Caso não haja nenhuma chave primária, as linhas de entrada são acrescentadas ao DataTable. Se houver informações de chave primária, 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 FillSchemade , especificando a PrimaryKey propriedade do DataTableou definindo a MissingSchemaAction propriedade AddWithKeycomo .

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 Definir 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 as 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 o OleDbDataAdapter encontrar colunas duplicadas ao preencher um DataTable, ele gerará nomes para as colunas subsequentes, usando o padrão "columnname1", "columnname2", "columnname3" e assim por diante. Nomes de coluna vazios são adicionados ao DataTable, usando uma cadeia de caracteres vazia para a primeira coluna, seguida por "1", "2", "3" e assim por diante para as colunas vazias subsequentes.

Os valores no ADO Recordset ou Record objetos são convertidos em tipos de Common Language Runtime para armazenamento no DataSet.

Cuidado

Essa sobrecarga do Fill método não chama Close implicitamente no 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 impede 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ê tenha criado 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)

Origem:
OleDbDataAdapter.cs
Origem:
OleDbDataAdapter.cs
Origem:
OleDbDataAdapter.cs

Adiciona ou atualiza linhas no DataSet para que correspondam às linhas em um objeto Recordset ou Record do ADO usando o DataSet, o objeto ADO e o 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

Um DataSet a ser preenchido com registros e, se necessário, com o esquema.

ADODBRecordSet
Object

Um objeto Recordset ou Record ADO.

srcTable
String

A tabela de origem usada para os mapeamentos de tabela.

Retornos

O número de linhas adicionadas com êxito a ou atualizadas 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 dos dados devem ser tratadas por 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, caso a propriedade MissingSchemaAction seja definida como AddWithKey, as chaves primárias apropriadas e as restrições também são criadas.

Se houver informações de chave primária, 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 FillSchemade , especificando a PrimaryKey propriedade do DataTableou definindo a MissingSchemaAction propriedade AddWithKeycomo .

Para funcionar corretamente com o provedor de dados .NET Framework para OLE DB, AddWithKey requer que o provedor OLE DB nativo obtenha as 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 são 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 Definir chaves primárias.

Se o Recordset for 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 apenas chama NextRecordset no fechado Recordset e continua o processamento.

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

Se o DbDataAdapter objeto encontrar colunas duplicadas ao preencher um 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 no DataSet de acordo com o 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 no ADO Recordset ou Record objetos são convertidos em tipos de Common Language Runtime para armazenamento no DataSet.

Observação

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

O exemplo a seguir usa um OleDbDataAdapter para preencher um DataSet usando um ADO Recordset que é um objeto ADO Record . Este exemplo pressupõe que você tenha criado 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