Domanda su transazione e campo contatore

martedì 18 settembre 2007 - 13.50

Amodio Profilo | Expert


ho un dubbio sulla transazione:

se apro una tansazione,ed avvio 2 procedure, la procedura A inserisce dentro "ordini" la procedura B inserisce dentro "Dettaglio_Ordini"
appena la procedura A,inserisce un record, mi restituisce anche il contatore, in modo che la procedura B possa inserire il codice relativo all'ordine

essendoci una transazione, mi recupera il contatore?
oppure la transazione inserisce effettivamente i record solo DOPO che tutti sono andati a buon fine?

Brainkiller Profilo | Guru

>essendoci una transazione, mi recupera il contatore?
>oppure la transazione inserisce effettivamente i record solo
>DOPO che tutti sono andati a buon fine?

In genere per questo tipo di cose si usa una Stored Procedure per inserire l'ordine, e si recupera il counter con SELECT @@IDENTITY oppure ancora meglio si usa scope_identity(). Così puoi inserirlo anche in altre tabelle o restituirlo al chiamante.

A fine transazione tu puoi dare un COMMIT e quindi tutto quello che è successo dall'inizio viene come dire "approvato". Esempio se tu fai delle INSERT nel database all'interno di una transazione queste operazioni non sono effettivamente "live" fino a quando hai eseguito il COMMIT.

Al contrario se ci sono errori esegui un ROLLBACK e tutto ciò che hai fatto (per esempio operazioni di INSERT, DELETE,ecc.) vengono annullate tornando alla situazione originale. Chiaramente un messaggio d'errore dev'essere restituito al chiamante.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Amodio Profilo | Expert

il problema è che uso access
quindi niente stored procedure

ora mi sto informando su cosa sono le scope_identity()

Brainkiller Profilo | Guru

>il problema è che uso access
>quindi niente stored procedure
>ora mi sto informando su cosa sono le scope_identity()

Allora cade tutto il resto del discorso. Access non ha un supporto alle transazioni come quello offerto dai più noti RDBMS.

L'unica cosa che puoi fare è usando la stessa connessione, fare una INSERT e poi fare un ExecuteScalar con un SELECT @@IDENTITY per recuperare l'ultimo ID.

Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5