Frage zu Konvertierung von eigenen Objekten in bestehende Parameterklassen

25/03/2008 - 16:50 von Andreas Graefe | Report spam
Hallo,

ich habe eine eigene Klasse eines Parameters für Datenbankabfragen erstellt, welche vom Interface IDataParameter abgeleitet wurde. Ich habe auch alles
eingebunden, was das Interface bietet. Nun möchte ich die Klasse in meiner DB-Zugriffskomponente verwenden. Da ich aber verschiedene Db-Parameter
berücksichtigen muss, weil ich alle Provider unterstützen möchte (OleDb, SqlClien, Oracle, Odbc), wollte ich beim Zuweisen der endgültigen
Parameterklasse keine großen Arbeiten mehr machen. Mir schwàrmte vor, die endgültigen Klassen aus dem eigene Typ zu casten.

Mal in Code.

//eigene Parameterklasse
public class DAParameter : IDataParameter..

//casten
DAParameter meinParameter = new DAParameter(...);
//casten als SqlParameter (so auch als OracleParameter, )
DbParameter parameter = meinParameter as SqlParameter;

Das geht so aber nicht, obwohl die abstrakte Klasse DbParameter auch das Interface IDataParameter implementiert.

Gibt es da eine andere Möglichkeit oder Herangehensweise?


Andreas
 

Lesen sie die antworten

#1 Elmar Boye
25/03/2008 - 17:26 | Warnen spam
Hallo Andreas,

Andreas Graefe schrieb:
ich habe eine eigene Klasse eines Parameters für Datenbankabfragen
erstellt, welche vom Interface IDataParameter abgeleitet wurde. Ich habe
auch alles eingebunden, was das Interface bietet. Nun möchte ich die
Klasse in meiner DB-Zugriffskomponente verwenden. Da ich aber
verschiedene Db-Parameter berücksichtigen muss, weil ich alle Provider
unterstützen möchte (OleDb, SqlClien, Oracle, Odbc),



Von allen tràume ich auch ;-)
Nur ist das leider nicht mit den paar Schnittstellen getan.
Im Wege stehen da neben dem unterschiedlichen SQL auch die
unterschiedlichen Datentypen - denn DbType ist nur der kleinste
gemeinsame Nenner.

wollte ich beim
Zuweisen der endgültigen Parameterklasse keine großen Arbeiten mehr
machen. Mir schwàrmte vor, die endgültigen Klassen aus dem eigene Typ zu
casten.



Das wird nicht funktionieren, da man keine andere Klasse "ercasten" kann.

public class DAParameter : IDataParameter..

//casten
DAParameter meinParameter = new DAParameter(...);
//casten als SqlParameter (so auch als OracleParameter, )
DbParameter parameter = meinParameter as SqlParameter;



Was Du verwenden kannst ist CreateParameter aus dem IDbCommand
und die Werte Deines IDataParameter zuweisen. Wobei Du dazu
immer noch ein IDbCommand vom Provider brauchst.

Ein zentralerer Ansatz wàre, die jeweilige DbProviderFactory
zu verwenden, die kann das ebenso leisten.
Und verwendet die Db... Klassen als kleinsten Nenner,
was neuere (ADO.NET 2.0 kompatible) Provider tun sollten.

Das geht so aber nicht, obwohl die abstrakte Klasse DbParameter
auch das Interface IDataParameter implementiert.



Naja, sie implementiert ja nicht wirklich, da sie abstrakt ist,
und die Elemente der Schnittstelle einfach als abstrakt durchreicht,
d. h. sie überlàßt es dem jeweiligen Provider die Schnittstelle
zu implementieren.

Gruß Elmar

Ähnliche fragen