Partager via


Remplissage d'un DataSet avec un objet ADO Recordset ou Record

Pour fournir un accès à partir de ADO.NET aux objets ADO Recordset et Record, le fournisseur de données .NET Framework pour OLE DB surcharge la méthode Fill du OleDbDataAdapter de sorte qu'il accepte un objet ADO Recordset ou Record. Le remplissage d'un DataSet avec le contenu d'un objet ADO constitue une opération unidirectionnelle. Cela signifie que des données peuvent être importées de l'objet ADO Recordset ou Record vers le DataSet, mais que toute mise à jour des données doit être gérée explicitement. Cependant, une fois que vous avez rempli un DataSet de données provenant d'un objet ADO, vous pouvez répercuter les modifications dans la source de données au moyen d'un DataAdapter et aussi écrire les données en XML.

L'opération Fill ajoute des lignes aux objets DataTable existants dans le DataSet si aucune information de clé primaire n'est disponible. Si des informations de clé primaire sont disponibles pour le DataTable, l'opération Fill met à jour les lignes assorties des clés primaires correspondantes. Pour plus d'informations sur l'extraction des informations de clé primaire à partir d'une source de données, consultez Ajout de contraintes existantes à un DataSet. Les informations de clé primaire peuvent également être définies par programme, comme expliqué dans Définition d'une clé primaire pour une table.

Avant de pouvoir utiliser un composant COM (Component Object Model) qui retourne un objet ADO Recordset ou Record au moyen des services .NET COM Interop et de ADO.NET, vous devez importer les informations de bibliothèque de types pour le composant COM et ADO à l'aide de Type Library Importer (Tlbimp.exe). Pour plus d'informations sur l'accès aux objets COM à partir du .NET Framework, consultez Exposition de composants COM au .NET Framework.

**Remarque   **Visual Studio.NET fournit un assembly PIA (Primary Interop Assembly) pour ADO dans le répertoire « Program Files\Microsoft.NET\Primary Interop Assemblies » du fichier adodb.dll. Si vous possédez une copie de Visual Studio.NET déjà installée, il est recommandé d'utiliser ce fichier (adodb.dll) plutôt que d'importer le vôtre à l'aide de l'importateur de bibliothèques de types (tlbimp.exe). Pour plus d'informations sur les assemblys PIA, consultez Assemblys PIA (Primary Interop Assembly).

Par exemple, un composant COM existant dont le ProgId est ADOComponent.DataClass est compilé dans ADOComponent.dll. Il possède des méthodes qui retournent des objets de type ADODB.Recordset. Pour utiliser cet objet à partir de .NET, importez ADOComponent.dll ainsi que msado15.dll qui contient les objets ADODB.Recordset et ADODB.Record. Pour importer les bibliothèques de types COM vers .NET, écrivez les commandes suivantes.

TlbImp "C:\Program Files\Common Files\System\Ado\msado15.dll" /out:ADODB.dll
TlbImp ADOComponent.dll /out:ADOCOM.dll

Vous pouvez ensuite passer les bibliothèques .NET obtenues, ADODB.dll et ADOCOM.dll, en tant que références de bibliothèques lors de la compilation d'un programme .NET. Le code suivant illustre la compilation d'un programme Visual Basic .NET utilisant vbc.exe et fournissant les bibliothèques COM importées.

vbc MyVB.vb /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll

Le code suivant illustre la compilation d'un programme C# utilisant csc.exe et fournissant les bibliothèques COM importées.

csc MyCS.cs /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll

L'exemple suivant montre le code que vous pourriez écrire dans l'environnement .NET si l'objet ADOComponent.DataClass était assorti d'une méthode GetData retournant un 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();

L'exemple de code suivant montre comment l'objet ADODB.Recordset peut être utilisé pour remplir (Fill) 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");

**ATTENTION  ** ****Lorsque vous utilisez les objets ADO Recordset ou Record avec des applications .NET Framework, appelez toujours Close lorsque vous avez terminé. Ainsi, la connexion sous-jacente à la source de données est libérée en temps voulu, ce qui permet d'éviter toute violation d'accès résultant de la libération d'objets ADO non managés par le garbage collection lorsqu'il existe toujours des références.

Notez que la surcharge OleDbDataAdapter.Fill qui prend un DataSet et un objet ADO appelle implicitement Close sur l'objet ADO lorsque l'opération Fill est terminée. Vous devez fermer explicitement l'objet ADO Recordset ou Record après avoir appelé la surcharge OleDbDataAdapter.Fill qui prend un DataTable.

Voir aussi

Accès à un objet ADO Recordset ou Record à partir de ADO.NET | Type Library Importer (Tlbimp.exe) | Exposition de composants COM au .NET Framework