Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352

    [VB.NET] SQL Server concorrenza pessimistica

    Vorrei gestire la concorrenza pessimistica sulla mia applicazione con base dati SQL server.
    In pratica vorrei fare questo: apro un anagrafica cliente in visualizzazione e non ho nessun blocco negli altri client che aprono la stessa anagrafica. Vado nello stato di modifica (tramite apposito button) e a questo punto dovrei bloccare il record in modo che da un altro client se viene richiamata la stessa anagrafica la posso aprire in visualizzazione ma non posso passare allo stato di modifica perchè è già in modifica sul primo client.
    Come posso fare?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Potresti aprire una transazione con un livello di lock tale da bloccarne qualsiasi altra, ma onestamente mi porrei un milione di dubbi su una implementazione del genere, del tutto obsoleta, che peraltro non sfrutta a dovere le funzionalità di un database SQL Server appositamente progettato per lavorare in multiutenza.

    A quel punto, meglio adottare un altro DB, se non altro per avere questo tipo di lock gestito in modo più guidato.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352
    Che consiglio mi daresti quindi io ho pensato a questa architettura perchè ho delle maschere dove o molti dati da impostare e non vorrei che un utente faccia tutte le modifiche poi in fase di salvataggia abbia un messaggio che gli dice che non può salvare perchè i dati nel frattempo sono stati modificati da altri utenti.
    Preferisco dire che ci sono altri utenti che stanno già modificando i dati....

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da raffaele.p
    Che consiglio mi daresti quindi io ho pensato a questa architettura perchè ho delle maschere dove o molti dati da impostare e non vorrei che un utente faccia tutte le modifiche poi in fase di salvataggia abbia un messaggio che gli dice che non può salvare perchè i dati nel frattempo sono stati modificati da altri utenti.
    Ma questo non è in linea di massima un problema: è semplicemente una condizione da gestire (se la si vuol gestire).

    Nel caso vi sia una incongruenza nei dati, in genere viene data la possibilità di effettuare una "riconciliazione", cioè di stabilire come unire le proprie modifiche a quelle degli altri utenti, ma potresti semplicemente intercettare l'eventuale errore e segnalare di riaggiornare i dati o verificare le modifiche di altri in qualche modo.

    Comunque sia, anche ammesso che si voglia "bloccare" un utente (fermo restando che questo preclude una certa fluidità di lavoro e causa sicuramente dei problemi), un simile blocco lo implementerei con una comunicazione tramite socket piuttosto che con un lock su DB.

    Penso che la soluzione migliore in generale sia documentarsi e attuare una struttura con lock ottimistico.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352
    Ritorno sull'argomento dopo che ho letto varie documentazioni e mi sono reso conto che è un po' controverso e ci sono varie teorie.

    Comunque per quello che ho letto ho deciso di usare l'approccio 'pessimistico' ma non so bene come implementarlo e spero che qualcuno mi possa dare una mano.

    Io in pratica devo fare questo:

    Ho una prima form con una DataGridView che contiene i record della mia tabella anagrafica (popolata tramite gli oggetti di ADONET databinding, dataadapter etc...) facendo doppio clik su una riga mi si apre la form di dettaglio dove ho le varie textbox con i valori relativi a quel record (le test box in apertura le metto in stato disabilitato in modo che non si possono editare) a questo punto ho a disposizione il button MODIFICA che mi riabilita le textbox e le rende nuovamente editabili, in questo punto vorrei bloccare il record in modo che se uno da una altra istanza del programma apre la maschera sullo stesso record lo possa vedere ma se clikka il tasto MODIFICA gli appaia il messaggio il record è bloccato e non può essere modificato.

    Qualche buon anima mi può aiutare con qualche esempio su come possa gestire questi 'lock'?
    Da quello che ho capito al momento che faccio modifica dovrei attivare una transazione e bloccare li il record, quando la transazione poi si chiuderà (con salva o annulla) il lock del record sparisce e può di nuovo essere utilizzato dagli altri....

    Aiutoooo

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.