OleDbDataAdapter.Fill Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 |
Fill(DataSet, Object, String) |
Adiciona ou atualiza linhas no DataSet para que correspondam às linhas em um objeto |
Fill(DataTable, Object)
- Origem:
- OleDbDataAdapter.cs
- Origem:
- 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
Parâmetros
- 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 AddWithKey
como .
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
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
- 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 AddWithKey
como .
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();