:D
allora “mi batti”… bene… fa piacere vedere che hai ancora voglia di fare queste cose :D
tornando a noi, gia' avevo indicato il fatto che personalmente non concordo con la costruzione del comando cosi' pessimistico..
il “motivo” di questa sintassi e' “semplice”: per aggiornare/cancellare una riga, e' necessario che NON sia stata modificata dal momento della sua “lettura”… quindi una filosofia completamente “pessimistica”… puo' avere senso in molti casi, ma non sempre…
In SQL Server, per “semplificare” questa necessita', si puo' utilizzare una colonna di tipo RowVersion, una colonna che viene automagicamente gestita dal subsystem dello storage engine presente in SQL Server, che effettua un aggiornamento automatico del valore della colonna modificata, permettendoti di scrivere
SELECT colonnaPK, ColonnaXX, ...., colonnaRowVersion
FROM ...
WHERE ....;
poi pseudo codice "applicativo"
dim List(of pocoClass) testList As New List(of pocoClass)()
While dataReader.Read()
testList.Add(New pocoClass With {.ColonnaPK = reader(0), .ColonnaXX = reader(n), ColonnaRowVersion = reader(xxx)})
End While
...
testList(0).ColonnaXX = nuovoValore
ed infine la chiamata al codice SQL di aggiornamento/cancellazione...
UPDATE/DELETE ....
... {ColonnaXX = @valoreColonnaXX}
WHERE colonnaPK = @valorePK
AND colonnaRowVersion = @valoreRowVersion_ORIGINALE;
dove tutta la logica pessimistica viene appunto “riassunta” dalla comparazione nella seconda riga del filtro WHERE, senza utilizzare la sintassi “prolissa” (ma comunque corretta) generata dal Wizard di VS.
salutoni romagnoli
–
Andrea