Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Transazioni...

  1. #1

    Transazioni...

    Salve raga

    Ho un problema :

    In un webservice devo fare degli inserimenti in 2 tabelle SqlServer distinte :

    La prima , un unico inserimento relativo alla testata di un ordine , e poi N inserimenti
    relativi alle posizioni di un ordine...

    Ora il tutto deve essere gestito da una Transazione in modo che se qualcosa fà fiasco,
    i dati vengono mantenuti...

    Il problema è che tra le 2 tabelle cè un vincolo sulla chiave , ovvero che il numero
    ordine della tabella delle posizioni , esista sulla tabella di testata...

    Ora la transazione , inserisce la riga nella testata dell'ordine , ma quando passa al
    dettagli genera errore perchè non trova l'indice dell'ordine appena creato

    Come risolvo ??

    Devo fargli fare un commit per forza ?

  2. #2

    Re: Transazioni...

    Originariamente inviato da DarioN1
    ...Ora la transazione , inserisce la riga nella testata dell'ordine , ma quando passa al
    dettagli genera errore perchè non trova l'indice dell'ordine appena creato
    non capisco se tra il primo inserimento recuperi l'id del record inserito (es. con scope_identity se usi sqlserver) e poi lo usi per gli inserimenti seguenti
    Saluti a tutti
    Riccardo

  3. #3
    Ciao Riccardo ,

    L'id dell'ordine mi è passato dall'esterno , non è quello il problema

    Il problema è che la tabella di testata e la tabella di dettaglio sono vincolate dal campo Numero Ordine . . .

    Se inserisco un numero ordine sulla tabella di dettaglio che non esiste sulla tabella di testata , ho giustamente l'errore :

    "INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_MTS_PRODOTTI_MTS'. The conflict occurred in database 'DVLP', table 'MTS', column 'ID'.The statement has been terminated"

    Praticamente la transazione prima inserisce sulla testata , poi inserisce sul dettaglio...
    Il problema è che durante l'inserimento nel dettaglio , non è stato fatto alcun commit sul
    primi inserimento , quindi non mi trova la coincidenza

  4. #4
    Originariamente inviato da DarioN1
    ...
    Praticamente la transazione prima inserisce sulla testata , poi inserisce sul dettaglio...
    Il problema è che durante l'inserimento nel dettaglio , non è stato fatto alcun commit sul
    primi inserimento , quindi non mi trova la coincidenza
    umh... se hai un vincolo referenziale sulla colonna IDOrdine tra Ordini e Dettagli, e l'IDOrdine e' presente nella tabella Ordini (anche se l'inserimento e' stato fatto all'interno di una transazione e quindi il commit finale non e' stato ancora chiamato) dovresti poter procedere all'interno della stessa transazione all'inserimento nella tabella dettagli usando lo stesso IDOrdine.
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249

    Re: Transazioni...

    Originariamente inviato da DarioN1
    Salve raga

    Ho un problema :

    In un webservice devo fare degli inserimenti in 2 tabelle SqlServer distinte :

    La prima , un unico inserimento relativo alla testata di un ordine , e poi N inserimenti
    relativi alle posizioni di un ordine...

    Ora il tutto deve essere gestito da una Transazione in modo che se qualcosa fà fiasco,
    i dati vengono mantenuti...

    Il problema è che tra le 2 tabelle cè un vincolo sulla chiave , ovvero che il numero
    ordine della tabella delle posizioni , esista sulla tabella di testata...

    Ora la transazione , inserisce la riga nella testata dell'ordine , ma quando passa al
    dettagli genera errore perchè non trova l'indice dell'ordine appena creato

    Come risolvo ??

    Devo fargli fare un commit per forza ?
    vedi le transaction isolation level !!!!
    in poche parole devi permettere le "phantom read"...
    cerca con google per capire il discorso delle isolation level di un db.
    I got the remedy

  6. #6
    Ho provato con ReadUncommitted , però non ha funzionato . . .

    Ora li provo tutti . . .

  7. #7
    "le transaction isolation level " e' un discorso che impatta su come piu' transazioni debbano interagire fra loro. Il comportamento di default per sqlserver2005 e' Read_committed. In ogni caso, qui si parla di una transazione.
    Saluti a tutti
    Riccardo

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da DarioN1
    Ho provato con ReadUncommitted , però non ha funzionato . . .

    Ora li provo tutti . . .
    se non funziona con quello lascia stare le altre in quanto sono più restrittive...
    cmq, strano che non funziona :master:
    I got the remedy

  9. #9
    Raga , ho provato tutte le opzioni di isolamento ma ho sempre lo stesso errore

  10. #10
    ripeto:

    "le transaction isolation level " e' un discorso che impatta su come piu' transazioni debbano interagire fra loro. Il comportamento di default per sqlserver2005 e' Read_committed. In ogni caso, qui si parla di una transazione.

    Per trovare la soluzione al tuo problema bisognerebbe analizzare il codice della tua stored procedures, il vincolo di integrita' referenziale che hai impostato, le tabelle coinvolte
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.