Hallo,
ich schreibe gerade an einer kleinen aber feinen Abstraktionsschicht für Datenbanken, mit der ich recht flott auf die Datenbanken MySQL, Access und MSSQL zugreifen kann.
Bisher benutze ich dafür konkrete Klassen, die object-Werte zurückgeben, also etwa so:
Datenbankwert (long) --> DataField.Value (object)
Wenn ich nun einen Wert aus dem DataField haben möchte, muss ich natürlich erst einmal explizit konvertieren. Das führt leider zu ganz erbärmlichen Klammerkonstruktionen im Code, führt zu extra Tipparbeiten und sieht richtig besch…eiden aus. Von der Wartbarkeit will ich erst einmal gar nicht anfangen.
Ich würde nun gerne eine generische Klasse DataField schreiben, die in etwa so aussieht
public class DataField
{
public valType Value;
[...]
public DataField[...]
}
Wie instanziiere ich die Klasse nun, damit diese den (nächstbesten) Wert des Datenbanktypen annimmt, also nicht DataReader oder sowas, sondern den tatsächlich aus der Datenbank gelesenen Wert?
Versucht habe ich schon, die Klasse mit einem System.Type zu instanziieren, aber das geht leider nicht:
DataField df = new […]
Je nach Datenbank nutze ich den MySqlDataReader, den OleDbDataReader oder den SqlDataReader.
Google und MSDN lassen mich diesbezüglich im Stich.
Vielen Dank für eure Hilfe,
Grüße,
Alexander