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
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
[SQL SERVER] Info su Transazioni con VB.Net o C#
martedì 24 novembre 2009 - 00.11
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gigi90
Profilo
| Senior Member
285
messaggi | Data Invio:
mar 24 nov 2009 - 00:11
Salve a tutti, non conosco bene come funzionano le transazioni in SQL Server, vi espondo subito il mio problema: utilizzo la libreria ADO.NET per le transazioni in particolare gli oggetti SQLConnection ed SQLTransaction, vi esponso subito il mio problema con questo codice:
Dim conn as new SQLConnection(StringaConnession)
conn.Open()
Dim trans as SqlTransaction= conn.BeginTransaction()
Dim com as New SqlCommand("INSERT INTO Prodotti(ID,Descrizione) VALUES (1,'Prova')",conn,trans)
com.ExecuteNonQuery()
com.CommandText="SELECT MAX(Id)+1 FROM Prodotti"
com.ExecuteScalar()'Qui va in timeout
All'esecuzione dell'ultimo comando l'operazione va in timeout poichè vado ad eseguire una query su una tabella modificata che risulta quindi bloccata ad altre operazioni, a questo punto vorrei sapere come permettere operazioni di scrittura e lettura su una stessa tabella nella stessa transazione.
Grazie a tutti coloro che mi aiuteranno.
P.S.:L'sql è esemplificativo e serve solo ad esporvi il problema.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 24 nov 2009 - 10:11
>Dim conn as new SQLConnection(StringaConnession)
>conn.Open()
>Dim trans as SqlTransaction= conn.BeginTransaction()
>Dim com as New SqlCommand("INSERT INTO Prodotti(ID,Descrizione)
>VALUES (1,'Prova')",conn,trans)
>com.ExecuteNonQuery()
>com.CommandText="SELECT MAX(Id)+1 FROM Prodotti"
>com.ExecuteScalar()'Qui va in timeout
>
>All'esecuzione dell'ultimo comando l'operazione va in timeout
>poichè vado ad eseguire una query su una tabella modificata che
>risulta quindi bloccata ad altre operazioni, a questo punto vorrei
>sapere come permettere operazioni di scrittura e lettura su una
>stessa tabella nella stessa transazione.
Secondo me la cosa migliore da fare è definire una colonna IDENTITY ed incapsulare il comando di INSERT in una stored procedure parametrica che restituisca l'ID autogenerato richiamando la funzione SCOPE_IDENTITY().
In questo modo eviti l'utilizzo delle transazioni minimizzando il lock ed aumentando di conseguenza la scalabilità del DBMS:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=12216
>Grazie a tutti coloro che mi aiuteranno.
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
gigi90
Profilo
| Senior Member
285
messaggi | Data Invio:
mar 24 nov 2009 - 10:37
Graze per la risposta, il codice è solo esemplificativo(per simulare il caso), io vorrei sapere se esiste una soluzione per permettere il lock condiviso, quindi ci si puo accedere in lettura. Grazie
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 24 nov 2009 - 21:42
>Graze per la risposta, il codice è solo esemplificativo(per simulare
>il caso), io vorrei sapere se esiste una soluzione per permettere
>il lock condiviso, quindi ci si puo accedere in lettura.
l'isolation transaction level di default di SQL Server è read committed che mantiene gli shared lock sulle righe in lettura dalla transazione corrente in modo da prevenire che altre transazioni possano modificarle.
La matrice di compatibilità la trovi al seguente link:
http://msdn.microsoft.com/en-us/library/ms186396.aspx
Come vedi gli shared lock sono incompatibili solo con i lock IX, SIX e X peranto non vengono bloccare eventuali letture eseguite da altre transazioni.
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
gigi90
Profilo
| Senior Member
285
messaggi | Data Invio:
mer 25 nov 2009 - 00:19
Scusa la mia ottusagine quindi non posso fare select in una stressa transazione su tabelle che ho modificato in precedenza?
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 !