OleDbDataAdapter.Fill Méthode

Définition

Ajoute ou actualise des lignes dans le DataSet but de les mettre en correspondance dans un objet ou Record ADORecordset.

Surcharges

Nom Description
Fill(DataTable, Object)

Ajoute ou actualise des lignes dans un DataTable objet ou Recordset ado Record pour les mettre en correspondance à l’aide des objets ADO et ADO spécifiésDataTable.

Fill(DataSet, Object, String)

Ajoute ou actualise des lignes dans le DataSet but de les mettre en correspondance dans un objet ou Recordset ADO Record à l’aide du nom de DataSettable source, objet ADO et spécifié.

Fill(DataTable, Object)

Ajoute ou actualise des lignes dans un DataTable objet ou Recordset ado Record pour les mettre en correspondance à l’aide des objets ADO et ADO spécifiésDataTable.

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

Paramètres

dataTable
DataTable

À DataTable remplir avec des enregistrements et, s’il est nécessaire, schéma.

ADODBRecordSet
Object

Objet ou Record ADORecordset.

Retours

Nombre de lignes correctement actualisées dans le DataTable. Cela n’inclut pas les lignes affectées par les instructions qui ne retournent pas de lignes.

Remarques

Le lien entre ADO (ActiveX Data Objects) et ADO.NET est une opération unidirectionnelle dans laquelle vous pouvez copier des données d’ADO vers le DataSet, mais toutes les mises à jour des données doivent être gérées par ADO.NET.

Cette surcharge de la Fill méthode ne ferme pas l’entrée Recordset à l’achèvement de l’opération Fill .

Lors de la gestion des instructions SQL batch qui retournent plusieurs résultats, cette implémentation de Fill et FillSchema pour OLE DB.NET Framework Fournisseur de données récupère uniquement les informations de schéma pour le premier résultat.

L’opération Fill ajoute les lignes à l’objet de destination DataTable spécifié dans le DataSet, créant l’objet DataTable s’il n’existe pas déjà. Lorsque vous créez un DataTable objet, l’opération Fill crée généralement uniquement des métadonnées de nom de colonne. Toutefois, si la MissingSchemaAction propriété est définie AddWithKeysur , les clés primaires et les contraintes appropriées sont également créées.

Vous pouvez utiliser la Fill méthode plusieurs fois sur le même DataTable. Si une clé primaire existe, les lignes entrantes sont fusionnées avec des lignes correspondantes qui existent déjà. Si aucune clé primaire n’existe, les lignes entrantes sont ajoutées au DataTable. Si les informations de clé primaire sont présentes, toutes les lignes dupliquées sont rapprochées et n’apparaissent qu’une seule fois dans le DataTable fichier correspondant au DataSet. Les informations de clé primaire peuvent être définies via FillSchema, en spécifiant la PrimaryKey propriété du DataTableou en définissant la MissingSchemaAction propriété AddWithKeysur .

Si SelectCommand retourne les résultats d'une jointure externe, le DataAdapter ne définit pas de valeur PrimaryKey pour le DataTableobtenu. Vous devez définir explicitement la clé primaire pour vous assurer que les lignes en double sont résolues correctement. Pour plus d’informations, consultez Définition des clés primaires.

Pour fonctionner correctement avec le Fournisseur de données .NET Framework pour OLE DB, AddWithKey exige que le fournisseur OLE DB natif obtienne les informations de clé primaire requises en définissant la propriété DBPROP_UNIQUEROWS, puis détermine les colonnes qui sont des colonnes clés primaires en examinant DBCOLUMN_KEYCOLUMN dans le IColumnsRowset. L’utilisateur peut également définir explicitement les contraintes de clé primaire sur chaque DataTable. Cela permet de s’assurer que les enregistrements entrants qui correspondent aux enregistrements existants sont mis à jour au lieu d’être ajoutés.

Si les OleDbDataAdapter colonnes dupliquées se produisent lors du remplissage d’un DataTable, elles génèrent des noms pour les colonnes suivantes, à l’aide du modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Les noms de colonnes vides sont ajoutés à l’aide DataTabled’une chaîne vide pour la première colonne, suivie de « 1 », « 2 », « 3 », et ainsi de suite pour les colonnes vides suivantes.

Les valeurs d’ADO Recordset ou Record d’objets sont converties en types Common Language Runtime pour le stockage dans le DataSet.

Attention

Cette surcharge de la Fill méthode n’appelle Close pas implicitement l’objet ADO lorsque l’opération de remplissage est terminée. Par conséquent, appelez Close toujours lorsque vous avez terminé d’utiliser ADO Recordset ou Record des objets. Cela permet de s’assurer que la connexion sous-jacente à une source de données est publiée en temps voulu et empêche également les violations d’accès possibles en raison d’objets ADO non managés récupérés par garbage collection lorsque des références existantes existent toujours.

Lorsque vous appelez la TableMappings.Add méthode sur un DataAdapter paramètre de table source et que vous mappez explicitement le paramètre de table source à une chaîne vide, le jeu de données est correctement rempli à l’aide de la table source, mais le jeu de données ne sera rempli avec rien. Par exemple, dans l’exemple suivant, rDataSet il n’y aura rien à remplir.

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

Cet exemple montre comment ignorer un résultat lors de la gestion de plusieurs résultats.

L’exemple suivant utilise un OleDbDataAdapter pour remplir un DataTable objet ADO Recordset. Cet exemple part du principe que vous avez créé un 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();

Voir aussi

S’applique à

Fill(DataSet, Object, String)

Ajoute ou actualise des lignes dans le DataSet but de les mettre en correspondance dans un objet ou Recordset ADO Record à l’aide du nom de DataSettable source, objet ADO et spécifié.

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

Paramètres

dataSet
DataSet

À DataSet remplir avec des enregistrements et, s’il est nécessaire, schéma.

ADODBRecordSet
Object

Objet ou Record ADORecordset.

srcTable
String

Table source utilisée pour les mappages de tables.

Retours

Nombre de lignes ajoutées ou actualisées dans le DataSet. Cela n’inclut pas les lignes affectées par les instructions qui ne retournent pas de lignes.

Exceptions

La table source n’est pas valide.

Remarques

Le lien entre ADO (ActiveX Data Objects) et ADO.NET est une opération unidirectionnelle dans laquelle vous pouvez copier des données d’ADO vers le DataSet, mais toutes les mises à jour des données doivent être gérées par ADO.NET.

La Fill méthode itère dans plusieurs résultats en appelant la NextRecordset méthode sur le Recordset, fermant l’entrée Recordset à l’achèvement de l’opération Fill .

L’opération Fill ajoute les lignes à l’objet de destination DataTable spécifié dans le DataSet, créant l’objet DataTable s’il n’existe pas déjà. Lorsque vous créez un DataTable objet, l’opération Fill crée généralement uniquement des métadonnées de nom de colonne. Toutefois, si la MissingSchemaAction propriété est définie AddWithKeysur , les clés primaires et les contraintes appropriées sont également créées.

Si les informations de clé primaire sont présentes, toutes les lignes dupliquées sont rapprochées et n’apparaissent qu’une seule fois dans le DataTable fichier correspondant au DataSet. Les informations de clé primaire peuvent être définies via FillSchema, en spécifiant la PrimaryKey propriété du DataTableou en définissant la MissingSchemaAction propriété AddWithKeysur .

Pour fonctionner correctement avec le Fournisseur de données .NET Framework pour OLE DB, AddWithKey nécessite que le fournisseur OLE DB natif obtienne les informations de clé primaire requises en définissant la propriété DBPROP_UNIQUEROWS, puis déterminez les colonnes principales en examinant DBCOLUMN_KEYCOLUMN dans le IColumnsRowset. L’utilisateur peut également définir explicitement les contraintes de clé primaire sur chaque DataTable. Cela garantit que les enregistrements entrants qui correspondent aux enregistrements existants sont mis à jour au lieu d’être ajoutés.

Si SelectCommand retourne les résultats d'une jointure externe, le DataAdapter ne définit pas de valeur PrimaryKey pour le DataTableobtenu. Vous devez définir explicitement la clé primaire pour vous assurer que les lignes en double sont résolues correctement. Pour plus d’informations, consultez Définition des clés primaires.

Si la Recordset valeur est fermée avant le début de l’opération Fill , aucune erreur ne se produit. Cela est nécessaire pour la gestion de plusieurs résultats, car les requêtes qui ne retournent pas de lignes sont indiquées par une fermeture Recordset. Le OleDbDataAdapter seul appel NextRecordset à la fermeture Recordset et continue le traitement.

Si une erreur est rencontrée lors du remplissage du jeu de données, les lignes ajoutées avant l’occurrence de l’erreur restent dans le DataSet. Le reste de l’opération est abandonné.

Si l’objet DbDataAdapter rencontre des colonnes en double lors du remplissage d’un DataTable, il génère des noms pour les colonnes suivantes, à l’aide du modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Si les données entrantes contiennent des colonnes sans nom, elles sont placées dans le DataSet modèle « Column1 », « Column2 », et ainsi de suite. Lorsque plusieurs jeux de résultats sont ajoutés à chaque DataSet jeu de résultats est placé dans une table distincte. D’autres jeux de résultats sont nommés en ajoutant des valeurs intégrales au nom de table spécifié (par exemple, « Table », « Table1 », « Table2 », etc.). Les applications qui utilisent des noms de colonnes et de tables doivent s’assurer que les conflits avec ces modèles d’affectation de noms ne se produisent pas.

Les valeurs d’ADO Recordset ou Record d’objets sont converties en types Common Language Runtime pour le stockage dans le DataSet.

Note

Cette surcharge de la Fill méthode appelle Close implicitement l’objet ADO lorsque l’opération de remplissage est terminée.

L’exemple suivant utilise un OleDbDataAdapter pour remplir un DataSet objet ADO Recordset qui est un objet ADO Record . Cet exemple part du principe que vous avez créé un objet et 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();

Voir aussi

S’applique à