DevTrain

Autor: Hannes Preishuber

ADO Recordsets meets ADO .NET

Obwohl hier bei DevTrain und auch anderorts das Recordset todgesagt wurde, ist an verschiedenen Stellen der Bedarf nach Recordsets in der .NET Welt groß. Was tut man, wenn z.b. mit dem gewrappten COM Objekt ein Recordset als Rückgabe erhält und in einem Dataset benötigt?

Nur der OLEDB Datenprovider bietet dabei in der Fill Methode einen überladenen Aufruf, dem als Parameter ein Rekordset übergeben wird. Allerdings und logischerweise verliert sich dabei die Connection, so das das Recordset quasi per Value übergeben wird.

Dabei unterscheidet die Fill Methode zwischen Primary Key und nicht Primary Key. Ohne diesen werden die Datensätze einfach an eine existierende Datatable angehängt. Mit Key wird bei vorhandensein des passenden Schlüssel die DataRow einfach aktualisiert.

Um ADO oder eine andere COM Komponente überhaupt verwenden zu können, muss erst eine Wrapper Klasse erzeugt werden. Dies passiert mit dem Type Library Importer (Tlbimp.exe). Dieses Tool erzeugt aus der angegeben COM DLL die per OUT Parameter definierte "managed" DLL. Wenn Sie eine COM.DLL haben, die einen Recordset zurückgibt, brauchen Sie auch noch einen Wrapper für ADO. Ansonsten wird der Datentyp Recordset ein unbekannter bleiben.

TlbImp "C:Program FilesCommon FilesSystemAdomsado15.dll" /out:ADODB.dll
TlbImp MyADO.dll /out:ADOCOM.dll


Wenn Sie Ihr Programm dann manuell kompilieren wollen, müssen den Compiler (VBC.exe oder CSC.exe) mit den benötigten Assemblies aufrufen.

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

Sie können dann ganz einfach per NEW die Klasse instanzieren und einem ADO.Recordset Datentyp zuweisen.

[Visual Basic]
Dim adoKomponente As ADOCOM.DataClass = New ADOCOM.DataClass
Dim adoRS As ADODB._Recordset = adoKomponente.GetData()
[C#]
ADOCOM.DataClass adoKomponente = new ADOCOM.DataClass();
ADODB._Recordset adoRS = adoKomponente.GetData();

Nun haben wir den Recordset und übergeben ihn per Fill dem Dataset.

[Visual Basic]
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");

Am Schluss sollte jeder gute Developer noch die Close Methode aurufen um die Connection zu schliessen. Für das ADO Objekt erledigt dies die Fill Methode von ganz alleine, wenn die Daten geholt wurden.


 


Erfasst am: 09.07.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=784
© Copyright 2003 ppedv AG - http://www.ppedv.de