verwendetes Datenbanksystem: <SQLEXPRESS 2008>
Hallo, stehe grad vor folgendem Problem: Ich mache Berechnungen und frage dazu Daten aus einer Tabelle ab, die als typ. DataSet eingebunden ist.
Nun muß ich genau eine strukturidntische Tabelle zusätzlich erstellen, weil ich bestimmte Informationen eben getrennt (deshalb nun zwei Tebellen) ablegen muss.
Nun möchte ich ja wie bisher die typisierte DataRow die ich nach der Suche zurück bekommen habe weiterhin in meiner Klasse verwenden. Jetzt hab ich halt zwei identische Tabellen, und ich kann die Row der neuen Tabellen nich in die Row der anderen stecken und an die Klassen übergeben, die ich verwende.
Nun, wie mach ich das am einfachsten ohen viel Code dazustricken zu müssen? Schnittstelle anlegen, oder gibts da noch etwas anderes damit ich mit zwei Tabellen arbeiten kann?
Hi,
Bist Du Dir wirklich sicher dass Du zwei Tabellen brauchst? Möglicherweise kann man die Sätze auch in einer Tabelle mit einer zusätzlichen Spalte als Diskriminator packen und zwei Views drüberlegen welche die originalen 'Tabellen' repräsentieren.
Du könntest Dir auch mal einen ORM anschauen, die Teile haben mit ähnlichen Problemen zu kämpfen, einmal wegen der Vererbung (Table per Type) und einmal wegen vertikaler Partitionierung von Tabellen. Vllt kannst Du das für Dich nutzen.
Wenn Du bei Ado.Net bleiben willst würde ich zwei Methoden in den TableRows-Klassen definieren.
public TableARow ToTableARow()
{
return this;
}
public TableBRow ToTableBRow()
{
var row = new TableBRow();
//row mit eigenen Werten befüllen
return row;
}
So kannst Du wenigstens stressarm konvertieren ohne den konkreten Typen kennen zu müssen.
Hallo Witte, ich würde schon gerne bei ADO.Net bleiben.
Ich habe im DataSet.Designer.cs rumgeschnüffelt und die Typ.DataTableRow-Klassen gesucht. Ich habe dort auch eine Methode eingefügt.
Bei dir sieht das so aus, als müsste man Daten in der Methode ToTableBRow()
der neuen row zuweisen. Dann muss ich die Daten erst wieder manuell zuweisen.
Meinst du das so?
Schau Dir mal DataRow.ItemArray an. Es werden dort alle Felder als object[] im/exportiert. Möglicherweise brauchst Du nur die neue Row zu konstruieren und dann die Elemente als ItemArray durchreichen.
Übrigens, die strongtyped DataRow-Klassen sind partiell. Schreibe Deine Erweiterungen nicht in die vom Designer generierten Klasse sondern in einer extra C#-Datei (keyword partial)
Hi Witte, ich glaube es geht doch einfacher. Ich bin mir nicht sicher ob das funktioniert wenn ich das so programmiere. Hast du das schon so gemacht? ICh denke ich kann die row nachher nicht direkt auf ihre Properties ansprechen
int durchmesser = row.Durchmesser;
double winkel = row.winkel:
....
Ich habe etwas anderes. Ich werde dem TabelAdapter im DataSet einen neuen hinzufügen, der aber die Daten aus der andern strukturgleichen Tabelle liest.
Mal sehen ob das funzt.