OleDbDataAdapter.Fill Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Aggiunge o aggiorna righe nell'oggetto DataSet in modo che corrispondano a quelle in un oggetto ADO Recordset o Record .
Overload
| Nome | Descrizione |
|---|---|
| Fill(DataTable, Object) |
Aggiunge o aggiorna righe in un oggetto DataTable in modo che corrispondano a quelle in un oggetto ADO |
| Fill(DataSet, Object, String) |
Aggiunge o aggiorna righe nell'oggetto DataSet in modo che corrispondano a quelle in un oggetto ADO |
Fill(DataTable, Object)
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
- ADODBRecordSet
- Object
Oggetto ADO Recordset o Record .
Valori restituiti
Numero di righe aggiornate correttamente all'oggetto DataTable. Non sono incluse le righe interessate dalle istruzioni che non restituiscono righe.
Commenti
Il collegamento tra ActiveX Data Objects (ADO) e ADO.NET è un'operazione unidirezionale in cui è possibile copiare dati da ADO all'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 OLE DB.NET Framework provider di dati recupera le informazioni sullo schema solo per il primo risultato.
L'operazione Fill aggiunge le righe all'oggetto di destinazione DataTable specificato in DataSet, creando l'oggetto DataTable se non esiste già. Quando si crea un DataTable oggetto, l'operazione Fill crea in genere solo i metadati del nome di colonna. Tuttavia, se la MissingSchemaAction proprietà è impostata su AddWithKey, vengono create anche chiavi primarie e vincoli 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 aggiunte all'oggetto DataTable. Se sono presenti informazioni sulla chiave primaria, tutte le righe duplicate vengono riconciliate e vengono visualizzate una sola volta in DataTable che corrisponde a DataSet. Le informazioni sulla chiave primaria possono essere impostate tramite FillSchema, specificando la PrimaryKey proprietà di DataTableo impostando la MissingSchemaAction proprietà su AddWithKey.
Se SelectCommand restituisce i risultati di un OUTER JOIN, DataAdapter non imposta un valore PrimaryKey per l'elemento risultante DataTable. È 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 framework di .NET per OLE DB, AddWithKey richiede che il provider OLE DB nativo ottenga le informazioni necessarie sulla chiave primaria impostando la proprietà DBPROP_UNIQUEROWS e quindi determina quali colonne sono colonne chiave primaria esaminando DBCOLUMN_KEYCOLUMN nel IColumnsRowset. In alternativa, l'utente può impostare in modo esplicito i vincoli di chiave primaria per ogni DataTableoggetto . In questo modo si garantisce che i record in ingresso corrispondenti ai record esistenti vengano aggiornati anziché accodati.
Se rileva colonne duplicate durante il OleDbDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "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 .
Caution
Questo overload del Fill metodo non chiama Close in modo implicito sull'oggetto ADO al termine dell'operazione di riempimento. Pertanto, chiamare Close sempre al termine dell'utilizzo di ADO Recordset o Record oggetti. Ciò garantisce 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 sono ancora presenti.
Quando si chiama il TableMappings.Add metodo su e DataAdapter si esegue il mapping esplicito del parametro della tabella di origine a una stringa vuota, il set di dati viene compilato correttamente usando la tabella di origine, ma il set di dati non verrà popolato con nulla. Nell'esempio seguente, ad esempio, rDataSet non verrà popolato con nulla.
rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");
In questo esempio viene illustrato come ignorare un risultato quando si gestiscono più risultati.
Nell'esempio seguente viene usato un OleDbDataAdapter oggetto per riempire un DataTable oggetto utilizzando un 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)
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
- ADODBRecordSet
- Object
Oggetto ADO Recordset o Record .
- srcTable
- String
Tabella di origine utilizzata per i mapping delle tabelle.
Valori restituiti
Numero di righe aggiunte o aggiornate correttamente in DataSet. Non sono incluse le righe interessate dalle istruzioni che non restituiscono righe.
Eccezioni
La tabella di origine non è valida.
Commenti
Il collegamento tra ActiveX Data Objects (ADO) e ADO.NET è un'operazione unidirezionale in cui è possibile copiare dati da ADO all'DataSet, ma tutti gli aggiornamenti ai dati devono essere gestiti da ADO.NET.
Il Fill metodo esegue l'iterazione di più risultati chiamando il NextRecordset metodo su Recordset, chiudendo l'input Recordset al completamento dell'operazione Fill .
L'operazione Fill aggiunge le righe all'oggetto di destinazione DataTable specificato in DataSet, creando l'oggetto DataTable se non esiste già. Quando si crea un DataTable oggetto, l'operazione Fill crea in genere solo i metadati del nome di colonna. Tuttavia, se la MissingSchemaAction proprietà è impostata su AddWithKey, vengono create anche chiavi primarie e vincoli appropriati.
Se sono presenti informazioni sulla chiave primaria, tutte le righe duplicate vengono riconciliate e vengono visualizzate una sola volta in DataTable che corrisponde a DataSet. Le informazioni sulla chiave primaria possono essere impostate tramite FillSchema, specificando la PrimaryKey proprietà di DataTableo impostando la MissingSchemaAction proprietà su AddWithKey.
Per funzionare correttamente con il provider di dati di .NET Framework per OLE DB, AddWithKey richiede al provider OLE DB nativo di ottenere le informazioni sulla chiave primaria necessarie impostando la proprietà DBPROP_UNIQUEROWS e quindi determinare quali colonne sono colonne chiave primaria esaminando DBCOLUMN_KEYCOLUMN nel IColumnsRowset. In alternativa, l'utente può impostare in modo esplicito i vincoli di chiave primaria per ogni DataTableoggetto . In questo modo si garantisce che i record in ingresso che corrispondono ai record esistenti vengano aggiornati anziché accodati.
Se SelectCommand restituisce i risultati di un OUTER JOIN, DataAdapter non imposta un valore PrimaryKey per l'elemento risultante DataTable. È 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, non viene restituito alcun risultato dell'errore Fill . Questa operazione è necessaria per la gestione di più risultati, perché le query che non restituiscono righe sono indicate da un oggetto chiuso Recordset. L'oggetto OleDbDataAdapter chiama NextRecordset solo l'oggetto chiuso Recordset e continua l'elaborazione.
Se si verifica un errore durante il popolamento del set di dati, le righe aggiunte prima dell'occorrenza dell'errore rimangono in DataSet. Il resto dell'operazione viene interrotto.
Se l'oggetto rileva colonne duplicate durante il DbDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate nell'oggetto DataSet in 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 di 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 .
Note
Questo overload del Fill metodo chiama Close in modo implicito sull'oggetto ADO al termine dell'operazione di riempimento.
Nell'esempio seguente viene utilizzato un OleDbDataAdapter oggetto per riempire un DataSet oggetto utilizzando un OGGETTO ADO Recordset che è un oggetto ADO Record . In questo esempio si presuppone che sia stato creato un oggetto ADO RecordSet e Record .
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();