Sorállapotok és sorverziók
ADO.NET sorállapotok és -verziók használatával kezeli a táblák sorait. A sor állapota egy sor állapotát jelzi; A sorverziók a módosítás során megőrzik a sorban tárolt értékeket, beleértve az aktuális, az eredeti és az alapértelmezett értékeket is. Miután például módosította egy sor egyik oszlopát, a sor sorállapota Modified
és két sorverziója lesz: Current
az aktuális sorértékeket tartalmazó, valamint Original
az oszlop módosítása előtti sorértékeket tartalmazó sor.
Minden DataRow objektum rendelkezik egy RowState tulajdonságmal, amelyet megvizsgálhat a sor aktuális állapotának meghatározásához. Az alábbi táblázat az egyes RowState
enumerálási értékek rövid leírását tartalmazza.
RowState érték | Leírás |
---|---|
Unchanged | Nem történt módosítás a sor utolsó hívása AcceptChanges óta, illetve a sor létrehozása DataAdapter.Fill óta. |
Added | A sor hozzá lett adva a táblához, de AcceptChanges nem lett meghívva. |
Modified | A sor egyes elemei módosultak. |
Deleted | A sor törölve lett egy táblából, és AcceptChanges nem lett meghívva. |
Detached | A sor nem része egyiknek sem DataRowCollection . Az RowState újonnan létrehozott sor értéke a következő.Detached Miután az újat DataRow hozzáadta a DataRowCollection metódus meghívásával Add , a tulajdonság értéke a RowState következőre Added van állítva: .Detached egy olyan sorra is be van állítva, amelyet eltávolítottak DataRowCollection a Remove metódus használatával, vagy a Delete metódus által követett metódussal AcceptChanges . |
Amikor AcceptChanges
a rendszer meghívja egy DataSet, DataTable vagy DataRow, az összes sorállapotú Deleted
sort eltávolítja. A többi sor sorállapotú Unchanged
lesz, a sorverzió értékei Original
pedig felülírva lesznek a Current
sorverzió értékeivel. Amikor RejectChanges
a rendszer meghívja, a sorállapotú Added
összes sor el lesz távolítva. A többi sor sorállapotú Unchanged
lesz, a sorverzió értékei Current
pedig felülírva lesznek a Original
sorverzió értékeivel.
A sor különböző sorverzióit úgy tekintheti meg, hogy átad egy DataRowVersion paramétert az oszlophivatkozással, ahogy az az alábbi példában is látható.
Dim custRow As DataRow = custTable.Rows(0)
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()
DataRow custRow = custTable.Rows[0];
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();
Az alábbi táblázat az egyes DataRowVersion
enumerálási értékek rövid leírását tartalmazza.
DataRowVersion érték | Leírás |
---|---|
Current | A sor aktuális értékei. Ez a sorverzió nem létezik a következővel rendelkező RowState Deleted sorok esetében: |
Default | Egy adott sor alapértelmezett sorverziója. Egy , vagy egy sor alapértelmezett sorverziója Added a következőCurrent .Deleted Modified A sor alapértelmezett sorverziója Detached a következő Proposed . |
Original | A sor eredeti értékei. Ez a sorverzió nem létezik a következővel rendelkező RowState Added sorok esetében: |
Proposed | A sor javasolt értékei. Ez a sorverzió egy sor szerkesztési művelete során, vagy olyan sor esetében létezik, amely nem része a DataRowCollection sornak. |
A metódus meghívásával HasVersion és argumentumként való átadásával DataRowVersion
tesztelheti, hogy egy DataRow
adott sorverzióval rendelkezik-e. Például az újonnan hozzáadott sorok vissza fognak térnifalse
, DataRow.HasVersion(DataRowVersion.Original)
mielőtt AcceptChanges
meghívták volna őket.
Az alábbi példakód egy tábla összes törölt sorában megjeleníti az értékeket. Deleted
a sorok nem rendelkeznek sorverzióval Current
, ezért az oszlopértékek elérésekor meg kell felelnie DataRowVersion.Original
.
Dim catTable As DataTable = catDS.Tables("Categories")
Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
Console.WriteLine("Deleted rows:" & vbCrLf)
Dim catCol As DataColumn
Dim delRow As DataRow
For Each catCol In catTable.Columns
Console.Write(catCol.ColumnName & vbTab)
Next
Console.WriteLine()
For Each delRow In delRows
For Each catCol In catTable.Columns
Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)
Next
Console.WriteLine()
Next
DataTable catTable = catDS.Tables["Categories"];
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);
Console.WriteLine("Deleted rows:\n");
foreach (DataColumn catCol in catTable.Columns)
Console.Write(catCol.ColumnName + "\t");
Console.WriteLine();
foreach (DataRow delRow in delRows)
{
foreach (DataColumn catCol in catTable.Columns)
Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");
Console.WriteLine();
}