Laden...

Problem mit DataTable.Rows.Add()

9 Antworten
1,570 Aufrufe
Letzter Beitrag: vor 18 Jahren
Problem mit DataTable.Rows.Add()

verwendetes Datenbanksystem: <SQL Server 2002>

Hi,

ich habe hier folgenden fehlerhaften Code. Es gibt regelmässig eine Exception "diese Zeile gehört bereits zu einer Tablelle":


private void Compare(DataTable DtResult)
{
DataTable doubsDT = new DataTable();
 if (String.Compare(actualFIRST, DtResult.Rows[i + 1]["Firstname"].ToString())==0)
                            {
                                
                                // Hier gibt es den Fehler                                
                                doubsDT.Rows.Add(ccl.DtResult.Rows[i]);
                                
                            }
}

Nun, ich weiss dass diese Zeile zu einer Tabelle gehört- ich will diese Spezielle Zeile ja in die Neue Tabelle hineinkopieren....warum darf ich das nicht so einfach?

Hallo Getränke Hoffmann,

Du kopierst das Objekt, also die Referenz in eine neue Tabelle. Das heißt, dass die Row zu zwei Tabellen gehört und das ist natürlich nicht machbar, weil nicht eindeutig.

Du musst die Row clonen bzw. eine neue mit den gleichen Daten erstellen.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

Hilft auch nichts, das gibt den gleichen Fehler:


DataRow drow = doubsDT.NewRow();
drow = DtResult.Rows[i];
doubsDT.Rows.Add(drow);

Hallo Getränke Hoffmann,

damit machst Du das gleiche, wie in Deinem ersten Post! Du kopierst nur die Referenz des Objekts und damit steht in beiden Variablen die gleiche Row!

Du musst eine neue Row erzeugen und die Daten der ersten in die neue kopieren, also Spalte für Spalte. Evtl. gibt's auch eine Clone-Methode, die das für Dich erledigt.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

Nein, die gibt es natürlich nur für die ganze Tabelle...


doubsDT.ImportRow(ccl.DtResult.Rows[i]);

Hab keine Ahnung, ob die Row dadurch kopiert wird oder aus der Alten DataTable entfernt und in die neue eingefügt wird.

Danke, das klappt!

EDIT: Nee, klappt doch nicht, es wird eine leere Tabellenzeile eingefügt.

Seltsam. Der Gesamte ORM unserer Firma baut darauf auf. Und läuft.
Ist die DataRow vielleicht leer? (schon vor dem Import)

Hallo,

versuche doch mal folgendes:

doubsDT.Rows.Add(ccl.DtResult.Rows_.ItemArray);

Das müsste klappen.

Viele Grüße
Olaf