Riempimento di un DataSet con un oggetto Recordset ADO o Record ADO
Per fornire accesso a oggetti Record e Recordset ADO da ADO.NET, il provider di dati .NET Framework per OLE DB esegue un overload del metodo Fill di OleDbDataAdapter per accettare un oggetto Record o Recordset ADO. L'operazione di riempimento di un DataSet con il contenuto di un oggetto ADO è monodirezionale. È infatti possibile importare i dati da un oggetto Recordset ADO o Record ADO al DataSet, ma sarà necessario gestire esplicitamente ogni aggiornamento a tali dati. Una volta completata la compilazione di un DataSet con i dati provenienti da un oggetto ADO tuttavia, sarà possibile risolvere le modifiche fino all'origine dati tramite DataAdapter e scrivere inoltre dati in formato XML.
L'operazione Fill consente di aggiungere righe agli oggetti DataTable esistenti nel DataSet nel caso in cui non fosse disponibile alcuna informazione sulla chiave primaria. Se le informazioni sulla chiave primaria sono disponibili per la DataTable, l'operazione Fill consentirà di aggiornare le righe con le chiavi primarie corrispondenti. Per ulteriori informazioni sul recupero delle informazioni relative alla chiave primaria da un'origine dati, vedere Aggiunta di vincoli esistenti a un DataSet. In alternativa è possibile impostare a livello di programmazione le informazioni relative alla chiave primaria, come descritto in Definizione di una chiave primaria per una tabella.
Per utilizzare un componente COM che restituisce un oggetto Recordset ADO o Record ADO tramite i servizi di interoperabilità COM di .NET e ADO.NET, è necessario in primo luogo importare le informazioni della libreria dei tipi per il componente COM e ADO utilizzando l'utilità di importazione della libreria dei tipi (Tlbimp.exe). Per ulteriori informazioni sull'accesso agli oggetti COM tramite .NET Framework, vedere Esposizione di componenti COM a .NET Framework.
**Nota **Con Visual Studio .NET viene fornito un assembly di interoperabilità primario (PIA, Primary Interop Assembly) per ADO nel file adodb.dll, contenuto nella directory "Programmi\Microsoft.NET\Primary Interop Assemblies". Se si dispone di una copia di Visual Studio .NET, è consigliabile utilizzare questo file (adodb.dll) anziché importarne uno personale utilizzando l'utilità di importazione della libreria dei tipi (tlbimp.exe). Per ulteriori informazioni sugli assembly di interoperabilità primari, vedere Assembly di interoperabilità primari.
Un componente COM esistente con ProgId ADOComponent.DataClass è ad esempio compilato in ADOComponent.dll. In esso sono inclusi metodi che restituiscono oggetti di tipo ADODB.Recordset. Per utilizzare questo oggetto da .NET, importare sia ADOComponent.dll che msado15.dll, che contengono gli oggetti ADODB.Recordset e ADODB.Record. Per importare le librerie dei tipi COM in .NET, eseguire i comandi seguenti.
TlbImp "C:\Program Files\Common Files\System\Ado\msado15.dll" /out:ADODB.dll
TlbImp ADOComponent.dll /out:ADOCOM.dll
Durante la compilazione di un programma .NET, è quindi possibile passare le librerie .NET risultanti, ADODB.dll e ADOCOM.dll, come riferimenti alle librerie. Nel codice seguente viene illustrata la compilazione di un programma di Visual Basic .NET, effettuata utilizzando vbc.exe e fornendo le librerie COM importate.
vbc MyVB.vb /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll
Nel codice seguente viene illustrata la compilazione di un programma C#, effettuata utilizzando csc.exe e fornendo le librerie COM importate.
csc MyCS.cs /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll
Nell'esempio seguente viene mostrato il codice che si potrebbe scrivere in .NET nel caso in cui all'oggetto ADOComponent.DataClass fosse associato un metodo denominato GetData, che avesse restituito un oggetto ADODB.Recordset.
Dim adoComponent As ADOCOM.DataClass = New ADOCOM.DataClass
Dim adoRS As ADODB._Recordset = adoComponent.GetData()
[C#]
ADOCOM.DataClass adoComponent = new ADOCOM.DataClass();
ADODB._Recordset adoRS = adoComponent.GetData();
Nell'esempio di codice seguente viene mostrato come utilizzare l'oggetto ADODB.Recordset per eseguire un'operazione di Fill di un DataSet.
Dim myDA As OleDbDataAdapter = New OleDbDataAdapter
Dim myDS As DataSet = New DataSet
myDA.Fill(myDS, adoRS, "MyTable")
[C#]
OleDbDataAdapter myDA = new OleDbDataAdapter();
DataSet myDS = New DataSet();
myDA.Fill(myDS, adoRS, "MyTable");
**Attenzione **Quando si utilizzano gli oggetti Recordset ADO o Record ADO insieme alle applicazioni di .NET Framework, è sempre necessario chiamare Close una volta completate le operazioni desiderate. In questo modo ci si assicura che la connessione sottostante a un'origine dati venga rilasciata al momento opportuno e si evitano eventuali violazioni di accesso dovute al recupero da parte della Garbage Collection di oggetti ADO non gestiti, nel caso in cui fossero ancora presenti i riferimenti a tali oggetti.
Si noti che l'overload di OleDbDataAdapter.Fill, che accetta un DataSet e un oggetto ADO, chiama implicitamente Close per l'oggetto ADO una volta completata l'operazione Fill. Dopo aver chiamato l'overload di OleDbDataAdapter.Fill, che accetta un DataTable, occorrerà chiudere esplicitamente l'oggetto Record o Recordset ADO.
Vedere anche
Accesso a un oggetto Recordset ADO o Record ADO da ADO.NET | Utilità di importazione della libreria dei tipi (Tlbimp.exe) | Esposizione di componenti COM a .NET Framework