Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Transazioni in ASP

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    19

    Transazioni in ASP

    Ciao a tutti,

    ho un dubbio amletico: quando apro una transaction in ASP, dal momento in cui effettuo myConn.beginTrans fino al momento in cui eseguo myConn.commitTrans (o myConn.RollbackTrans) tutti i record di tutte le tabelle del database sono bloccati in lettura e scrittura oppure no? Come funziona la cosa?

    Ciao e grazie

  2. #2
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Se lavori su una sola tabella puoi usare

    Conn.BeginTrans

    Se lavori su più tabelle legate alla stessa connessione metti la direttiva ad inizio pagina

    <%@TRANSACTION=Required%>

    Le tabelle non vengono bloccate.
    Ogni database (quelli relazionali) implementa un sistema di rollback delle operazioni. Semplicemente se c'è un errore viene inviata un'istruzione di rollback al database.

    Se metti la direttiva puoi anche utilizzare due eventi:

    codice:
    Sub OnTransactionCommit()
    	Response.Write "Transazione avvenuta correttamente"
    End Sub
    
    Sub OnTransactionAbort()
    	Response.Write "Errore nella transazione"
    End Sub
    Che vengono lanciati in caso di transazione avvenuta correttamente (OnTransactionCommit) o meno (OnTransactionAbort)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    19
    Ciao, grazie per la risposta.
    Se metto la direttiva @TRANSACTION =Required poi è necessario sempre usare conn.BeginTrans e conn.CommitTrans (o conn.RollbackTrans) oppure no?
    Se, come dici, durante la transazione aperta altri utenti possono modificare i record delle tabelle, allora resta aperto il mio problema che è il seguente:
    supponiamo che io debba inserire nella tabella 'impiegati' un nuovo impiegato con il campo 'tipo_impiego', nel form per inserire l'impiegato ho la tendina per il tipo_impiego con 2 item: 'operaio' e 'ragioniere', io seleziono 'ragioniere', poi invio il form e viene elaborata la pagina asp che dovrebbe memorizzare nel database il nuovo impiegato, poco prima che ciò avvenga qualche altro utente ha però cancellato dalla tabella 'tipo_impieghi' il record 'ragioniere', a questo punto viene memorizzato il mio nuovo impiegato con la qualifica 'ragioniere' nel campo 'tipo_impiego', qualifica che non esiste più nella tabella 'tipo_impieghi'!!! Io non voglio che ciò accada, ecco perchè chiedevo se durante la transazione le tabelle vengono tutte bloccate almeno in scrittura ad altri utenti. Questo problema è banale ma dovendo fare delle modifiche a cascata su varie tabelle il problema può diventare serio.

    Ciao

  4. #4
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Con la direttiva non devi mettere conn.BeginTrans e conn.CommitTrans.

    Per quanto riguarda il tuo problema, credo che lo devi risolvere in un'altro modo, applicando cioè un'integrità referenziale e adirittura mettendo un delete on cascade (ma è da valutare).

    Il problema non si pone solo su un nuovo inserimento, ma per tutto il pregresso. Se viene cancellato "Ragioniere" dalla tabella, tutti gli impiegati che avevano come tipo impiego ragionire che fine fanno?
    Il punto è che non puoi permettere la cancellazione di di quel record se ci sono dati collegati, oppure la consenti mettendo un delete on cascade.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    19
    Ciao Baol74,
    ti ringrazio intanto per la tua cortese disponibilità, non vorrei rubarti tempo prezioso ma c'è da dire che il problema che ti ho esposto è solo un esempio per spiegare il problema generico della concorrenza di più utenti su uno stesso database. Questo problema esiste ed è molto importante ma nei vari forum in cui ho scritto nessuno mi sa dare risposte, è come se di questo problema non si interessi nessuno. Forse hai ragione tu: la Transaction è stata creata solo per fare in modo che una serie di operazioni a cascata siano o tutte effettuate con successo o nessuna effettuata ma essa non permette di bloccare il database. Ma allora se si vuole effettuare una serie di operazioni sul database senza essere 'disturbati', nel frattempo, da altre operazioni fatte da altri utenti (tipo il problema che ti ho posto nell'altro mio messaggio) come cavolo si deve fare?

    Grazie ancora e ciao

  6. #6
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    In quel caso, credo che devi creare un sistema di "accesso esclusivo" al database. L'idea dell'accesso esclusivo è banale, realizzarlo può però essere dispendioso: si tratta di settare un variabile application a true e disabilitare l'accesso alle pagine di modifica per tutti gli altri.

    Oppure dato che puoi lavorare solo tu sul database, non ha senso che il sito sia attivo... ergo... una bella scritta "Sito in manutenzione" ti consentirà di lavorare indistirbato.

    Ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    19
    Ciao,
    ok, grazie di tutto, non ho capito solo questo: perchè se uso conn.BeginTrans e conn.CommitTrans, durante la transazione, posso lavorare solo su una tabella legata a conn e non su un numero qualsiasi di tabelle legate alla stessa connessione conn?

    Ciao

  8. #8
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Questo è un mistero anche per me....

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    19
    Ciao,

    ok, grazie ancora, dato che mi interessa sapere per bene la teria di questo benedetto lock dei record sia nelle transazioni sia quando si apre un recordset con adLockPessimistic o con adLockOptimistic credo che dovrò acquistare un buon libro di ADO. Dato che sei un 'senior' di ASP e, a quanto vedo, di Milano, dove ci sono più possibilità di lavoro, sapresti dirmi se lì ci sono delle aziende che commissionano dei lavori in ASP tramite telelavoro? Io scrivo dalla Calabria e sono disoccupato e poter mettere a frutto le mie conoscenze di ASP facendo dei lavoretti mi farebbe comodo ma qui il lavoro scarseggia. Tu sei occupato stabilmente in una azienda?

    Ciao

  10. #10
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Secondo me puoi risparmiare i soldi del libro.

    Per quanto riguarda il lavoro, io sono a partita iva presso un'azienda. Asp regge ancora come linguaggio, ma sta calando, per ovvi motivi di politica microsoft. Qui a Milano si ricerca molto la triennale esperienza in dotnet (spesso sottopagata). Sicuramente il linguaggio più richiesto , per la mia esperienza è java.

    Il telelavoro lo trovi presso piccole aziende che ti commissionano dei siti di piccole-medie dimensioni (natuaralmente sottopagato).

    A parte il recente licenziamento di più 1000 lavoratori in IBM, la mia sensazione qui a Milano è abbastanza positiva... ma data la situazione economica-politica, si deve andare con i piedi di piombo.

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.