26 messaggi dal 06 settembre 2002
tutti gli interessanti esempi di questo sito sull'uso delle transazioni si riferiscono ad accessi e scritture su tabelle diverse dello stesso database. Nel mio caso invece devo lavorare con due diversi database (e quindi due oggetti connection). In pratica devo spostare i record da un DB all'altro (leggo da A, scrivo su B, cancello da A)
come posso fare per salvaguardare l'integrità dei dati?

quello che mi chiedo è posso innestare le transazioni? se le faccio iniziare e finire (commit o rollback) nello stesso momento ottengo il risultato voluto?? mi sembra un po' bruttina come soluzione...

Marco
358 messaggi dal 05 marzo 2001
Non vedo tutta questa differenza tra il lavorare con tabelle appartenenti allo stesso DB o a DB diversi.

Una transazione non è certo in rapporto 1:1 (una transazione, un database).
Tu inizi una transazione e poi fai tutte le connection che ti pare...
ovviamente devi poi testare l'oggetto Connection che stai usando in quel momento...

Ti consiglio, comunque, di non lasciare troppe connessioni "aperte", ma di effettuare il COMMIT appena hai verificato che è andato tutto ok.


Ciao
A.Paterno
Il =:P ianista
'Ascolta Mozart mezz'ora al giorno e ti toglierà il "magone" di torno'
26 messaggi dal 06 settembre 2002
Ti ringrazio,
in ogni caso ciò che devo realizzare prevede:

1- connessione database A
2- connessione database B
3- leggo un record da A
4- scrivo il record su B
5- cancello il record su A

in pratica vorrei raggruppare i punti 4 e 5 in un unica transazione... (in questo caso se la cancellazione non avviene con successo anche la scrittura non viene eseguita)

però in questa eventualità mi trovo a dover lavorare con due oggetti connessioni diversi e non so come posso fare...

Spero che il problema sia più chiaro...

grazie ancora per la risposta,

Marco
223 messaggi dal 06 settembre 2002
Contributi
www.ebow.it
Che problema c'è se sono due connessioni?

Fai un semplice insert nel dbA controlli l'avvenuto inserimento, cancelli il record nel dbB!

Puoi leggere e scrivere in tutti i db nello stesso ciclo!

Ciao

--
Lino Mari
Intermedia Srl
http://www.viadeimercanti.com - Il nuovo portale dell'e-business
http://www.imbnet.it - Intermedia Srl - Telematica e Multimedia

--
Lino Mari
http://www.ebow.it - e-business on web!
358 messaggi dal 05 marzo 2001
Effettivamente (da quel che ho potuto leggere), se devi lavorare con 2 database diversi, devi attivare necessariamente 2 transazioni (purtroppo sono legate all'oggetto Connection...)
Non credo ci sia un modo per usare una sola transazione...:-(

Io comunque farei così (un mix di pseudo-codifica e codifica vera e propria):
1 -connessione database A
2 -lettura record da A
3 -connessione database B
4 -inizio Transazione database B
5 -On Error Resume Next ' necessaria
6 -Application.Lock ' Sospensione flusso http
7 -scrittura record in B
8 -If err = 0 Then ' tutto bene
9 ----inizio Transazione database A
10 ---cancellazione record in A
11 ---If err = 0 Then ' tutto bene
12 ------Commit transazione database A
13 ------Commit transazione database B
14 ---else
15 ------Rollback transazione database A
16 ------Rollback transazione database B
17 ---end if
18 -else
19 ---Rollback transazione database B
20 -end if
21 -Application.UnLock ' Ripristino flusso http


Qui ho utilizzato sia l?isolamento dato dalla transazione sull?oggetto Connection sia la sospensione temporanea del flusso di richieste Http, grazie ai metodi LOCK/UNLOCK dell?oggetto ASP Application.


Ciao
A.Paterno
Il =:P ianista
'Ascolta Mozart mezz'ora al giorno e ti toglierà il "magone" di torno'

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.