OleDbDataAdapter.Fill Metodo

Definizione

Aggiunge o aggiorna righe nell'oggetto DataSet affinché corrispondano a quelle presenti in un oggetto ADO Recordset o Record.

Overload

Fill(DataTable, Object)

Aggiunge o aggiorna righe in un oggetto DataTable affinché corrispondano a quelle in un oggetto ADO Recordset o Record mediante l'oggetto DataTable e gli oggetti ADO specificati.

Fill(DataSet, Object, String)

Aggiunge o aggiorna righe nell'oggetto DataSet affinché corrispondano a quelle in un oggetto ADO Recordset o Record mediante l'oggetto DataSet, l'oggetto ADO e il nome della tabella di origine.

Fill(DataTable, Object)

Origine:
OleDbDataAdapter.cs
Origine:
OleDbDataAdapter.cs

Aggiunge o aggiorna righe in un oggetto DataTable affinché corrispondano a quelle in un oggetto ADO Recordset o Record mediante l'oggetto DataTable e gli oggetti ADO specificati.

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

Parametri

dataTable
DataTable

Classe DataTable in cui inserire i record e, se necessario, lo schema.

ADODBRecordSet
Object

Oggetto ADO Recordset o oggetto Record.

Restituisce

Numero di righe aggiornate con esito positivo all'oggetto DataTable. Non sono incluse righe modificate da istruzioni che non restituiscono righe.

Commenti

Il collegamento tra ActiveX Data Objects (ADO) e ADO.NET è un'operazione unidirezionale in cui è possibile copiare i dati da ADO a DataSet, ma tutti gli aggiornamenti ai dati devono essere gestiti da ADO.NET.

Questo overload del Fill metodo non chiude l'input Recordset al completamento dell'operazione Fill .

Quando si gestiscono istruzioni SQL batch che restituiscono più risultati, questa implementazione di Fill e FillSchema per il provider di dati OLE DB.NET Framework recupera le informazioni sullo schema solo per il primo risultato.

L'operazione Fill aggiunge le righe all'oggetto di destinazione DataTable specificato nell'oggetto DataSet, creando l'oggetto DataTable se non esiste già. Quando si crea un DataTable oggetto, l'operazione Fill crea normalmente solo metadati dei nomi di colonna. Tuttavia, se la MissingSchemaAction proprietà è impostata su AddWithKey, vengono create anche chiavi e vincoli primari appropriati.

È possibile usare il Fill metodo più volte nello stesso DataTableoggetto . Se esiste una chiave primaria, le righe in ingresso vengono unite con righe corrispondenti già esistenti. Se non esiste alcuna chiave primaria, le righe in ingresso vengono accodate all'oggetto DataTable. Se sono presenti informazioni sulla chiave primaria, tutte le righe duplicate vengono riconciliate e vengono visualizzate una sola volta nell'oggetto corrispondente all'oggetto DataTableDataSet. Le informazioni sulla chiave primaria possono essere impostate tramite FillSchema, specificando la PrimaryKey proprietà dell'oggetto DataTableoppure impostando la MissingSchemaAction proprietà su AddWithKey.

Se SelectCommand restituisce i risultati di un OUTER JOIN, mediante DataAdapter non viene impostato un valore di PrimaryKey per l'oggetto DataTablerisultante. È necessario definire in modo esplicito la chiave primaria per assicurarsi che le righe duplicate vengano risolte correttamente. Per altre informazioni, vedere Definizione delle chiavi primarie.

Per funzionare correttamente con il provider di dati .NET Framework per OLE DB, AddWithKey è necessario che il provider OLE DB nativo ottenga le informazioni di chiave primaria necessarie impostando la proprietà DBPROP_UNIQUEROWS e quindi determina quali colonne sono colonne chiave primaria esaminando DBCOLUMN_KEYCOLUMN nell'oggetto IColumnsRowset. In alternativa, l'utente può impostare in modo esplicito i vincoli di chiave primaria su ogni DataTableoggetto . Ciò garantisce che i record in ingresso corrispondenti ai record esistenti vengano aggiornati anziché aggiunti.

Se le colonne duplicate vengono visualizzate durante la OleDbDataAdapter popolamento di un DataTableoggetto , genera nomi per le colonne successive, usando il modello "columnname 1", "columnname2", "columnname3" e così via. I nomi di colonna vuoti vengono aggiunti a DataTable, usando una stringa vuota per la prima colonna, seguita da "1", "2", "3" e così via per le colonne vuote successive.

I valori in ADO Recordset o Record oggetti vengono convertiti in tipi common language runtime per l'archiviazione DataSetin .

Attenzione

Questo overload del Fill metodo non chiama Close in modo implicito l'oggetto ADO al termine dell'operazione di riempimento. Pertanto, chiamare Close sempre al termine l'uso di ADO Recordset o Record oggetti. Ciò assicura che la connessione sottostante a un'origine dati venga rilasciata in modo tempestivo e impedisca anche possibili violazioni di accesso a causa di oggetti ADO non gestiti recuperati da Garbage Collection quando i riferimenti esistenti esistono ancora.

Quando si chiama il TableMappings.Add metodo in un oggetto e si esegue il mapping esplicito del parametro della tabella di origine a una DataAdapter stringa vuota, il set di dati viene riempito correttamente usando la tabella di origine, ma il set di dati verrà popolato con nulla. Nell'esempio seguente, ad esempio, rDataSet verrà popolato con nulla.

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

In questo esempio viene illustrato come ignorare un risultato durante la gestione di più risultati.

Nell'esempio seguente viene usato un OleDbDataAdapter oggetto per compilare un oggetto usando un DataTable oggetto ADO Recordset. In questo esempio si presuppone che sia stato creato un OGGETTO 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();  

Vedi anche

Si applica a

Fill(DataSet, Object, String)

Origine:
OleDbDataAdapter.cs
Origine:
OleDbDataAdapter.cs

Aggiunge o aggiorna righe nell'oggetto DataSet affinché corrispondano a quelle in un oggetto ADO Recordset o Record mediante l'oggetto DataSet, l'oggetto ADO e il nome della tabella di origine.

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

Parametri

dataSet
DataSet

Classe DataSet in cui inserire i record e, se necessario, lo schema.

ADODBRecordSet
Object

Oggetto ADO Recordset o oggetto Record.

srcTable
String

Tabella di origine utilizzata per mapping di tabella.

Restituisce

Numero di righe aggiunte o aggiornate correttamente nell'oggetto DataSet. Non sono incluse righe modificate da istruzioni che non restituiscono righe.

Eccezioni

Tabella di origine non valida.

Commenti

Il collegamento tra ActiveX Data Objects (ADO) e ADO.NET è un'operazione unidirezionale in cui è possibile copiare i dati da ADO a DataSet, ma tutti gli aggiornamenti ai dati devono essere gestiti da ADO.NET.

Il Fill metodo esegue l'iterazione di più risultati chiamando il metodo in Recordset, chiudendo l'input NextRecordsetRecordset al completamento dell'operazioneFill.

L'operazione Fill aggiunge le righe all'oggetto di destinazione DataTable specificato nell'oggetto DataSet, creando l'oggetto DataTable se non esiste già. Quando si crea un DataTable oggetto, l'operazione Fill crea normalmente solo metadati dei nomi di colonna. Tuttavia, se la MissingSchemaAction proprietà è impostata su AddWithKey, vengono create anche chiavi e vincoli primari appropriati.

Se sono presenti informazioni sulla chiave primaria, tutte le righe duplicate vengono riconciliate e vengono visualizzate una sola volta nell'oggetto corrispondente all'oggetto DataTableDataSet. Le informazioni sulla chiave primaria possono essere impostate tramite FillSchema, specificando la PrimaryKey proprietà dell'oggetto DataTableoppure impostando la MissingSchemaAction proprietà su AddWithKey.

Per funzionare correttamente con il provider di dati .NET Framework per OLE DB, AddWithKey è necessario che il provider OLE DB nativo ottenga le informazioni di chiave primaria necessarie impostando la proprietà DBPROP_UNIQUEROWS e quindi determinare quali colonne sono colonne chiave primaria esaminando DBCOLUMN_KEYCOLUMN nell'oggetto IColumnsRowset. In alternativa, l'utente può impostare in modo esplicito i vincoli di chiave primaria su ogni DataTableoggetto . In questo modo si assicura che i record in arrivo corrispondenti ai record esistenti siano aggiornati anziché aggiunti.

Se SelectCommand restituisce i risultati di un OUTER JOIN, mediante DataAdapter non viene impostato un valore di PrimaryKey per l'oggetto DataTablerisultante. È necessario definire in modo esplicito la chiave primaria per assicurarsi che le righe duplicate vengano risolte correttamente. Per altre informazioni, vedere Definizione delle chiavi primarie.

Se l'oggetto Recordset viene chiuso prima dell'avvio dell'operazione Fill , non viene restituito alcun errore. Questa operazione è necessaria per la gestione di più risultati, perché le query che non restituiscono righe sono indicate da un oggetto chiuso Recordset. Il OleDbDataAdapter solo chiama NextRecordset sul chiuso Recordset e continua l'elaborazione.

Se si verifica un errore durante la popolamento del set di dati, le righe aggiunte prima dell'occorrenza dell'errore rimangono nell'oggetto DataSet. Il resto dell'operazione viene interrotto.

Se l'oggetto rileva colonne duplicate durante la DbDataAdapter compilazione di un DataTableoggetto , genera nomi per le colonne successive, usando il modello "columnname 1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate in DataSet base al modello "Column1", "Column2" e così via. Quando vengono aggiunti più set di risultati a DataSet ogni set di risultati viene inserito in una tabella separata. I set di risultati aggiuntivi vengono denominati aggiungendo valori integrali al nome della tabella specificato, ad esempio "Table", "Table1", "Table2" e così via. Le applicazioni che usano nomi di colonna e tabella devono assicurarsi che non si verifichino conflitti con questi modelli di denominazione.

I valori in ADO Recordset o Record oggetti vengono convertiti in tipi common language runtime per l'archiviazione DataSetin .

Nota

Questo overload del metodo chiama Close in modo implicito l'oggetto ADO al termine dell'operazione Fill di riempimento.

Nell'esempio seguente viene usato un OleDbDataAdapter oggetto per compilare un DataSet oggetto ADO Recordset che è un oggetto ADO Record . In questo esempio si presuppone che sia stato creato un oggetto e Record ADORecordSet.

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

Vedi anche

Si applica a