Freigeben über


Füllen eines DataSets mit einem ADO-Recordset oder einem ADO-Datensatz

Um von ADO.NET auf ADO-Recordset- und -Datensatzobjekte zugreifen zu können, überlädt der .NET Framework-Datenprovider für OLE DB die Fill-Methode des OleDbDataAdapter, um ein ADO-Recordset- oder -Datensatzobjekt annehmen zu können. Das Füllen eines DataSets mit dem Inhalt eines ADO-Objekts ist eine einseitige Operation. Das bedeutet, dass Daten aus dem ADO-Recordset oder -Datensatz in das DataSet importiert werden können, dass aber Aktualisierungen der Daten explizit behandelt werden müssen. Wenn Sie ein DataSet allerdings mit Daten eines ADO-Objekts gefüllt haben, können Sie Änderungen mit einem DataAdapter an die Datenquelle zurückgeben und Daten darüber hinaus im XML-Format schreiben.

Die Fill-Operation hängt Zeilen an die vorhandenen DataTable-Objekte im DataSet an, wenn keine Primärschlüsselinformationen verfügbar sind. Wenn für die DataTable Primärschlüsselinformationen zur Verfügung stehen, aktualisiert die Fill-Operation Zeilen mit entsprechenden Primärschlüsseln. Weitere Informationen zum Abrufen von Primärschlüsselinformationen aus einer Datenquelle finden Sie unter Hinzufügen vorhandener Einschränkungen zu einem DataSet. Alternativ dazu können Primärschlüsselinformationen auch, wie im Abschnitt Definieren eines Primärschlüssels für eine Tabelle beschrieben, programmgesteuert festgelegt werden.

Zum Verarbeiten einer COM-Komponente (Component Object Model)-Komponente, die ein ADO-Recordset oder einen ADO-Datensatz mit .NET COM-Interopdiensten und ADO.NET zurückgibt, müssen Sie zunächst die Informationen zur Typbibliothek für die COM-Komponente und ADO mit dem Type Library Importer-Tool (Tlbimp.exe) importieren. Weitere Informationen über den Zugriff auf COM-Objekte über .NET Framework finden Sie unter COM-Komponenten für .NET Framework verfügbar machen.

**Hinweis   **Visual Studio.NET stellt eine primäre Interop-Assembly (Primary Interop Assembly, PIA) für ADO im Verzeichnis Programme\Microsoft.NET\Primäre Interop-Assemblies in der Datei adodb.dll bereit. Wenn Sie über eine installierte Kopie von Visual Studio.NET verfügen, wird empfohlen, dass Sie diese Datei (adodb.dll) verwenden, anstatt Ihre eigene Datei mit dem Type Library Importer-Tool (tlbimp.exe) zu importieren. Weitere Informationen zu primären Interop-Assemblies finden Sie unter Primäre Interop-Assemblies.

Eine bestehende COM-Komponente mit der ProgId ADOComponent.DataClass z. B. wird in eine ADOComponent.dll kompiliert. Diese verfügt über Methoden, die Objekte vom Typ ADODB.Recordset zurückgeben. Um dieses Objekt über .NET zu verarbeiten, importieren Sie die ADOComponent.dll und die msado15.dll, die die Objekte ADODB.Recordset und ADODB.Record enthält. Geben Sie die folgenden Befehle aus, um die COM-Typbibliotheken in .NET zu importieren.

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

Sie können die daraus resultierenden .NET-Bibliotheken, ADODB.dll und ADOCOM.dll, beim Kompilieren eines .NET-Programms als Bibliotheksverweise übergeben. Der folgende Code demonstriert, wie ein Visual Basic .NET-Programm mit Hilfe der vbc.exe und durch Bereitstellen der importierten COM-Bibliotheken kompiliert wird.

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

Der folgende Code demonstriert, wie ein C#-Programm mit Hilfe der csc.exe und durch Bereitstellen der importierten COM-Bibliotheken kompiliert wird.

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

Das folgende Beispiel zeigt den Code, den Sie in .NET geschrieben hätten, falls das ADOComponent.DataClass-Objekt eine Methode namens GetData besessen hätte, die einen ADODB.Recordset zurückgegeben hätte.

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();

Das folgende Codebeispiel zeigt, wie das ADODB.Recordset-Objekt zum Füllen eines DataSets verwendet werden kann.

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");

**Vorsicht  ** ****Bei der Verwendung von ADO-Recordset- oder -Datensatzobjekten in Verbindung mit .NET Framework-Anwendungen müssen Sie nach Abschluss der Arbeit immer Close aufrufen. Damit wird sichergestellt, dass die zugrunde liegende Verbindung zu einer Datenquelle rechtzeitig freigegeben wird. Außerdem werden mögliche Zugriffsverletzungen aufgrund von nicht verwalteten ADO-Objekten vermieden, die von der Garbage Collection zurückgefordert werden, wenn noch Verweise vorhanden sind.

Die OleDbDataAdapter.Fill-Überladung, die mit einer DataTable und einem ADO-Objekt arbeitet, ruft Close implizit am ADO-Objekt auf, wenn die Fill-Operation beendet ist. Das ADO-Recordset oder Datensatzobjekt muss nach dem Aufruf der OleDbDataAdapter.Fill-Überladung mit einer DataTable ausdrücklich beendet werden.

Siehe auch

Zugriff auf ein ADO-Recordset oder einen Datensatz aus ADO.NET | Type Library Importer-Tool (Tlbimp.exe) | COM-Komponenten für .NET Framework verfügbar machen