DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  SQLdays konferenz vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
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.


 


Diskutieren Sie in den Foren

ppedv AG - 5 Sterne Trainings