SCOPE_IDENTITY chiarimenti please

martedì 30 settembre 2008 - 13.16

plaguebreath Profilo | Junior Member

Salve a tutti, ho qualche poblema con l'implementazione di una cosa per molti ovvia ma non per il sottoscritto. Ho un database in SQL Express 2005 (che dovrebbe andare anche su 2000 comunque) e ho una tabella al suo interno composta da qualche campo tra cui un integer autoincrementale e un campo descrizione su cui ho messo un vincolo di unicità.
Adesso su VB.Express ho creato un programmino banale, ho dataadapter, dataset non tipizzato, un bindingsource per gstirmi datagridview e alcune textbox per aggiornamenti dati che non vengono fatti tramite datagrid. Mi sono creato la logica di insert delete e update autonomamente e la ho impostata sul form_load in questo modo.

da.InsertCommand = New SqlCommand("INSERT INTO [Genere] (DescGenere) VALUES (@DescGenere);", cnn)
da.InsertCommand.Parameters.Add("@DescGenere", SqlDbType.VarChar, 50, "DescGenere")

Prima la stringa era stata modificata come segue utilizzando IDENTITY SCOPE:

da.InsertCommand = New SqlCommand("INSERT INTO [Genere] (DescGenere) VALUES (@DescGenere); SELECT IDGenere, DescGenere, GenereTime,isdeleted FROM Genere WHERE (IDGenere = SCOPE_IDENTITY())", cnn)

ho il mio tasto Add che mi abilita le textbox e mi attiva il bindingsource per aggiungere il nuovo record: bds.AddNew()

e quando ho finito clicco su accetta e poi su add e così via fino a quando voglio salvare il tutto cliccando sul tasto SALVA che mi fa scattare l'update.
A questo punto ho i problemi, con la stringa sopra all'inserimento del nuovo record ottengo i valori corretti se tuto va bene, se qualcosa va storto e ad esempio duplico la descrizione su due record ovviamente mi becco la segnalazione di errore. Correggendo però la descrizione e cliccando sul tasto SALVA l'id mi si è sballato di un tot di posizioni, sembra che pur non avendo scritto nulla sul database il contatore si sia mosso per conto suo e non ne capisco il motivo .....
Ho letto della gestione degli eventi tramite handler tipo questi :

AddHandler da.RowUpdated, AddressOf onrowupdated
AddHandler da.RowUpdating, AddressOf OnRowUpdating

Ma non n ho capito bene l'utilizzo, qualcuno potrebbe farmi un po' più di chiarezza ?
PS: non uso stored procedure, son già in affanno così figurarsi :(
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5