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 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 |
Fill(DataSet, Object, String) |
Aggiunge o aggiorna righe nell'oggetto DataSet affinché corrispondano a quelle in un oggetto ADO |
Fill(DataTable, Object)
- Origine:
- OleDbDataAdapter.cs
- Origine:
- OleDbDataAdapter.cs
- Origine:
- 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
Parametri
- 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
- Origine:
- 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
Parametri
- 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 NextRecordset
Recordset
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();