Newsgroup: it.comp.lang.visual-basic
Titolo: Using e oggetto connection

Abbiate pazienza ma mi sono intestardito ad usare una transaction in un 
db come sqlite
 
Using Con As New SQLiteConnection(StringaConnessione)
   Con.Open()
   'usiamo le transazioni
    trans = Con.BeginTransaction()
    Using comando As SQLiteCommand = Con.CreateCommand
         'qui siamo dentro il comando
         'TEST se è una insert
         If QuerySQL.ToUpper.Contains("INSERT INTO ") Then
           QuerySQL = QuerySQL + " SELECT last_insert_rowid() as nid;"
           comando.CommandText = QuerySQL
              Using dr As SQLiteDataReader = comando.ExecuteReader
                  If dr.HasRows Then
                     dr.Read()
                     _rowid = CType(dr("nid"), Long)
                  End If
              End Using
                   'ed adesso eseguiamo la transazione
                    trans.Commit()
                    Else
                   ....altra roba
                     trans.Commit()
                    End If
    End Using
                Con.Close()
End Using
 
Che fa questa routine(riportata in parte)?....mi inserisce un nuovo 
record e poi fa subito una SELECT last_insert_rowid() as nid per farsi 
dare il codice univoco del record inserito...che poi memorizza nel dato 
privato _rowid esposto da una property
 
Ma se fallisce qualcosa?
ho usato una
Try
...la routine di sopra
      Catch ex As SQLiteException
            'Errore
            'popola la corretta voce del dictionary
            retErr("ErrorePresente") = True
            retErr("Eccezione") = ex
            If Not (trans Is Nothing) Then
                trans.Rollback()
            End If
            Return False
End Try
 
 e qui mi assalgono i dubbi
 
try
  Using Con As New SQLiteConnection(StringaConnessione)
........
  End using
Catch ex As SQLiteException
   ......
            If Not (trans Is Nothing) Then
                trans.Rollback()
            End If
           return false
....
end try
 
Mi funziona...dentro una pagina 
asp.net
 ...ho provato anche a simulare 
errori....però se ne introduco più di un record senza ricaricare la 
pagina mi va in conflitto di concorrenza...io credo perchè NON CHIUDO 
la connessione
però la connessione è definita da   Using con...bla bla
e dentro il Catch non è disponibile!!!
un Con.close dentro il catch non è possibile!!!!
 
ED ALLORA LA DOMANDA
try
Using Con as connection
.....
 
end using
 
catch
 
end try
 
se mi interviene un errore dentro l'using ed io nel catch ho un return 
(un uscita dalla routine)...
con.close chi lo fa????
 Io credo rimanga appeso(nel limbo)...almeno parrebbe...tra l'altro la 
variabile 'con' essendo locale (almeno sembrerebbe) non mi è 
disponibile dentro il catch per poter fare un bel con.close prima del 
return...
 
Quindi using serve a poco in situazioni come questa? O sbaglio io! e  
sto tranquillo perchè al return (anche dentro un catch)l'using chiude 
la connessione???? probabile!!!
 
Grazie!
FW 3.5
 
-- 
----- Italliaaaaa 3227! -----
Quando vedi la tua verità fiorire sulle labbra del tuo nemico, devi 
gioire, perché questo è il segno della vittoria.
(Giorgio Almirante)
 
 

  e qui mi assalgono i dubbi
 
non ti serve fare il rollback, ti basta non fare la commit della 
transazione, quindi:
 
apri connessione
apri transazione
esegui command
commit transazione
chiudi connessione
 
se sbomba sei nello "using" quindi la connessione viene chiusa dal 
costrutto using e la transazione implicitamente rollbeccata.
 
.m
 
-- 
blog @ //
milestone.topics.it
 
 
 

 .m
 
ok thanks!
 
-- 
----- Italliaaaaa 3227! -----
Anche sul trono più alto del mondo, si sta seduti sul proprio culo.
( Michel de Montaigne )
 
 

 .m
aspetta un momento....se ho capito bene...
se non me ne frega nulla di valorizzare messaggi di errore e 
quant'altro di simile
un
Using Connection
.commit
end using
basta ed avanza?Rollbecca e chiude tutto da se anche in caso di errore!
A che miserve il try catch? se non a buttar via cicli macchina...
Ho inteso bene?
 
-- 
----- Italliaaaaa 3227! -----


Mauro Servienti [MVP] ha scritto:
 > rollbeccata.
 
*AHI !*
 
Bye, G.

 Bye, G.


 Ho inteso bene?
 
si
