Das DataSet-Objekt ist das Kernobjekt, das die getrennte und verteilte Datenlösung von ADO.NET unterstützt. Es hat eine breite Palette von Verwendungsmöglichkeiten, z. B. zum Abrufen von Daten aus einer DataTable oder zum Kopieren von Daten Eine andere DataTabe. Oder die Daten von DataRow, aber nur das Kopieren von DataSet und DataTable unterstützt das tiefe Kopieren, was bedeutet, dass nicht nur die Struktur des Elements, sondern auch die Daten des Elements kopiert werden können Keine entsprechende Kopiermethode. Diese werden im Folgenden kurz vorgestellt.
DataTable sourceTable;
DatatDataRow objectRow;
DataSet sourceDataSet = new DataSet(); object = souceDataSet.Copy();//Deep copy
DataSet object = souceDataSet.Clone();//Flache Kopie, nur das Schema kopieren
Copy DataTable
objectTable = sourceTable .Copy();/ / Deep copy
objectTable = sourceTable .Clone();//Flache Kopie, kopiert nur das Schema
Copy DataRow
Dieser Fehler tritt häufig bei der Projektentwicklung auf – „Diese Zeile gehört bereits zu einer anderen Tabelle“. Die Anweisung, die diesen Fehler verursacht hat, lautet wie folgt:
objectTable .Rows.Add(SourceDataRow);
Ich habe den Grund analysiert, da DataRow DataTable per Referenz aufgerufen wird. Sobald sich also eine Zeile in einer Tabelle befindet, kann sie nicht zu einer anderen Tabelle hinzugefügt werden.
Spezifische Methoden:
1 ImportRow-Methode: public void ImportRow( DataRow DataRow);
objectTable = sourceTable.clone();//Das Schema der Tabelle muss zuerst kopiert werden, um die gleichen Spalten oder Beziehungen zu haben !
foreach (DataRow oRow in sourceTable)
{
objectTable.ImportRow(oRow);//Fügen Sie eine neue Zeile in objectTable hinzu und kopieren Sie den Wert von sourceRow hinein. Die Struktur der Tabelle muss dieselbe sein !
}
____________________________________________________________________________________________
2. Durchlaufen Sie jede Spalte von DataTable
DataRow aDataRow = objectTable.NewRow();
foreach(DataColumn aDataColumn in sourceTable.Columns)
{
aDataRow [aDataColumn.ColumnName] = sourceTable[i][aDataColumn.ColumnName];
}
objectTable.Rows.Add(aDataRow);
3. Benutzerdefinierte Kopie
objectTable.Columns.Add ( " id");//Sie müssen nicht die gleiche Struktur haben, kopieren Sie einfach die benötigten Spalten!
Object [] myArry = new Object [1];
foreach (DataRow oRow in sourceTable)
{
tempRow = objectTable.NewRow();//Diese Methode muss aufgerufen werden!
myArry[0] = oRow["id"];//Wenn in der Quelltabelle in myArry keine ID-Spalte vorhanden ist , es wird ein Fehler gemeldet!
tempRow.ItemArray = myArry; // Die ItemArray-Eigenschaft ist ein Objekttyp-Array, und Sie können die Daten mehrerer Spalten entsprechend den Anforderungen des Programms kopieren! /Diese Methode muss aufgerufen werden, sonst werden die Daten in DataRow nicht angezeigt! [] newRow = new Object[ 3];
// Wert des Objektarrays festlegen
newRow[0] = "Hallo"
newRow[1] = "World"; [2] = "two";
DataRow myRow;
ObjectTable.BeginLoadData();
// Füge eine neue Zeile zur Tabelle hinzu
myRow = ObjectTable.LoadDataRow(newRow, true);/ /Das Flag sollte auf „true“ gesetzt sein, was das Hinzufügen einer neuen Zeile anzeigt.
ObjectTable.EndLoadData(); Diese Methode ist komplizierter, wenn Sie einfach die Daten einer vorhandenen Zeile kopieren, um eine neue Zeile hinzuzufügen. Es wird nicht empfohlen, es zu verwenden. Informationen zur spezifischen Verwendung finden Sie in der SDK-Dokumentation.