Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Info su gestione concorrenze su database
mercoledì 09 maggio 2012 - 15.05
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 3.5
|
Windows Server 2003
|
Visual Studio 2010
|
SQL Server 2008
|
Internet explorer 8.0
bryger
Profilo
| Newbie
15
messaggi | Data Invio:
mer 9 mag 2012 - 15:05
Salve a tutti,
sto creando un'applicazione web di tipo gestionale nella quale gli utenti possono inserire/modificare/cancellare dati su varie tabelle.
in fase di progettazione vorrei capire qual'è il metodo migliore per gestire le concorrenze :
1-In fase di inserimento sul problema della duplicazione della chiave primaria della tabella se più utenti inseriscono contemporaneamente una riga
2-in fase di modifica se più utenti effettuano un update sulla stessa riga.
Grazie
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
mer 9 mag 2012 - 15:55
dunque, per quanto riguarda l'inserimento, vorrei qualche info in più (la chiave primaria cosa è? come è gestita? come inseriscono gli utenti?)
Per la modifica e la cancellazione, puoi agire a livello di applicazione (business), o a livello di database, con approcci Ottimistic o Pessimistic.
Ecco una serie di esempi corredati da codice pronto.
Qui due esempi su come gestire la cosa sul DB con ADO.NET
http://msdn.microsoft.com/en-us/magazine/cc163924.aspx
http://msdn.microsoft.com/en-us/library/aa0416cz.aspx
questo è un esempio pratico di come utilizzare le tecniche qui sopra con DataSet e ObjectDataSource:
http://www.c-sharpcorner.com/uploadfile/john_charles/implementing-optimistic-concurrency-control-in-Asp-Net-2-0/
Qui un esempio simile ma che utilizza una unica colonna timestamp
http://www.codeproject.com/Articles/16160/Concurrent-User-Updates-in-ASP-NET-and-SQL-Server
Qui un esempio su come agire a livello di oggetti di business (classi)
http://weblogs.asp.net/gunnarpeipman/archive/2010/08/28/managing-business-object-locks-on-application-level.aspx
Qui un piccolo esempio per gestire i lock a livello di applicazione ma in maniera un po più semplice:
http://forums.asp.net/post/4050564.aspx
Spero che tutto questo materiale ti possa essere utile.
ciao
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
bryger
Profilo
| Newbie
15
messaggi | Data Invio:
mer 9 mag 2012 - 16:49
Grazie per le informazioni.
Per quanto riguarda l'inserimento la chiave primaria è generalmente un campo numerico (tabella del tipo codice/descrizione); gli utenti hanno a disposizione una pagina nella quale inseriscono la descrizione; il servizio web che gestisce i dati dovrebbe leggere l'ultimo codice di quella specifica tabella, incrementarlo di 1 e salvare).
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
mer 9 mag 2012 - 17:16
>Grazie per le informazioni.
>Per quanto riguarda l'inserimento la chiave primaria è generalmente
>un campo numerico (tabella del tipo codice/descrizione); gli
>utenti hanno a disposizione una pagina nella quale inseriscono
>la descrizione; il servizio web che gestisce i dati dovrebbe
>leggere l'ultimo codice di quella specifica tabella, incrementarlo
>di 1 e salvare).
>
>
non ho ben capito come gestire quindi la concorrenza in inserimento.
Sul codice? sulla descrizione? su entrambi?
Comunque magari te la risolvi in modo praticamente identico all'update.
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
bryger
Profilo
| Newbie
15
messaggi | Data Invio:
mer 9 mag 2012 - 17:22
Sul codice ovviamente; il problema si presenta quando due utenti inseriscono contemporaneamente un dato sulla stessa tabella, se l'insert è molto ravvicinata potrebbe succedere che entrambi leggono il nuovo id contemporaneamente (ad esmepio l'ultimo è il 100 e viene calcolato il 101), quando vanno a fare la insert uno dei due genera l'errore di chiave duplicata....
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
mer 9 mag 2012 - 17:51
ok, quindi il codice non lo mettono loro a mano? viene calcolato ul DB?
Non puoi fare in modo che il campo diventi un Identity?
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
bryger
Profilo
| Newbie
15
messaggi | Data Invio:
gio 10 mag 2012 - 19:05
Intendi il tipo di campo che si autogenera? si mi hanno consigliato di seguire questo metodo anche se non mi piace molto; ci sono altre alternative?
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
lun 14 mag 2012 - 10:54
se il codice non viene messo a mano, ma deve essere comunque un codice univoco che il sistema assegna al nuovo record, puoi fare un campo calcolato che si basa sempre però su identity:
COD00001AB dove
COD = stringa fissa
00001 = identity trasformata su 5 cifre (questo devi valutarlo in base a quali cifre potrebbe raggiungere il sistema)
AB = stringa casuale 2 caretteri
questè è solo un esempio.
Dipende dai tuoi gusti e da come si deve comportare il sistema.
In effetti se il codice deve essere un codice identificativo visibile al cliente, anche a me non piace molto un numero e basta.
Allora sul sistema mantengo comunque il campo identity (anche per le relazioni), ma a video presento il campo calcolato
ciao
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !