Domanda

Ho un ASP.Net pagina web in cui l'utente seleziona una riga per la modifica. Voglio utilizzare il blocco fila su quella riga e una volta che l'utente termina la modifica e aggiorna un altro utente può modificare quella riga vale a dire Come posso usare scalmo in modo che solo un utente può modificare una riga?

Grazie

È stato utile?

Soluzione

Non è possibile bloccare una riga del genere utilizzando le serrature del motore DB.

La maggior parte delle altre strategie si basano su come mantenere la connessione aperta (come sp_getapplock) e questo è senza senso in applicazioni web.

Anche se si imposta una bandiera sulla fila, cosa succede se l'utente chiude il browser semplicemente mid-edit?

suggerirei usando una colonna timestamp / rowversion per rilevare le modifiche alla riga in altre sessioni.

Altri suggerimenti

Qui sto dando due set di SQL per serratura fila durante select.

BEGIN TRAN

SELECT *
FROM   authors AU
WITH   (HOLDLOCK, ROWLOCK)
WHERE  AU.au_id = '274-80-9391'

/* Do all your stuff here while the row is locked */

COMMIT TRAN

Il suggerimento HOLDLOCK chiede gentilmente di SQL Server per contenere il blocco fino a quando il commit della transazione. Il suggerimento ROWLOCK chiede gentilmente SQL Server per bloccare solo questa riga anziché con l'emissione di una pagina o tabella di blocco.

Essere consapevoli del fatto che se un sacco di righe sono colpiti, SQL Server prenderà l'iniziativa e aumentare a blocchi di pagina, o avrete un intero esercito di blocchi di riga riempire la memoria del server e impantanarsi elaborazione.

altro

SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1 

un altro buon collegamento che voglio condividere con voi sulla serratura. https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/

grazie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top