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
Problema chiave duplicata in tabella
lunedì 04 giugno 2012 - 23.58
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Visual Studio 2010
|
SQL Server 2008 R2
1111matteo1111
Profilo
| Newbie
2
messaggi | Data Invio:
lun 4 giu 2012 - 23:58
Ciao a tutti
(non so se devo postare qui o in vb.net)
in vb.net e sql 2008 r2 sto realizzando un programma per caricamento ordini
la tabella principale è composta da i seguenti campi:
Anno INTEGER
Tipo INTEGER
Numero INTEGER
ecc..
ecc.
ecc.
I primi tre campi rappresentano anche la chiave primaria
Vorrei provare come si comporta il programma in multiutenza
Diciamo che così scrivo il progressivo del nuovo ordine
StringaTot="INSERT INTO ProvaTab (Anno,Tipo,Numero) SELECT 2012,1,MAX(Numero) +1 FROM ProvaTab WHERE Anno=2012"
Comando.CommandText = stringaTot
Comando.Connection = dbs
Comando.ExecuteNonQuery()
Fin qui tutto ok. I record vengono creati correttamente
Ma in multiutenza?
Per simulare ho creato vari thread che richiamano la sub sopra ma appena avviamo
mi da errore di chiave duplicata.
Come mai?
Dovrei utilizzare obbligatoriamente un campo incremento per inserire i nuovi record?
Grazie in anticipo
micto27
Profilo
| Senior Member
385
messaggi | Data Invio:
mer 6 giu 2012 - 13:50
>Per simulare ho creato vari thread che richiamano la sub sopra
>ma appena avviamo
>mi da errore di chiave duplicata.
>Come mai?
>Dovrei utilizzare obbligatoriamente un campo incremento per inserire
>i nuovi record?
Ciao,
succede perchè potrebbe capitare che 2 o più thread acquisiscono con la SELECT lo stesso MAX(Numero)
e quindi solo la prima delle N insert andrebbe a buon fine.
Quindi o utilizzi una colonna ad incremento automatico (identity) oppure devi garantirti che il metodo che esegue
l'operazione sia configurato in modo che possa essere attraversato da un solo Thread per volta.
In VB ad esempio
<MethodImpl(MethodImplOptions.Synchronized)> _
Public Sub miaProcedure()
End Sub
ciao, Michele
1111matteo1111
Profilo
| Newbie
2
messaggi | Data Invio:
gio 7 giu 2012 - 10:34
Grazie
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 !