Laden...

Nur eine typisierte DataRow für zwei strukturgleiche Tabellen ??

Erstellt von oehrle vor 13 Jahren Letzter Beitrag vor 13 Jahren 764 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Nur eine typisierte DataRow für zwei strukturgleiche Tabellen ??

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?

W
955 Beiträge seit 2010
vor 13 Jahren

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.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren

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?

W
955 Beiträge seit 2010
vor 13 Jahren

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)

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren

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.