65 messaggi dal 20 aprile 2004
Salve a tutti.

Ho realizzato un webservice che si interfaccia ad Oracle. Tale servizio esegue tutta una serie di operazioni quali select, insert, delete, update ma anche operazioni di DCL (grant, revoke, ecc).
Per le operazioni che lo richiedono sfrutta le transazioni senza particolari problemi (è già installato in diversi ambienti di produzione).
In alcunii (pochi, per fortuna) ambienti però all'esecuzione di comandi con transazioni ricevo sistematicamente questo errore:
"Execute requires the Command object to have a Transaction object when the Connection object assigned to the Command is in a pending local transaction. The Transaction property of the Command has not been initialized. "

Per sbloccare la situazione l'unica soluzione che ho trovato è stata quella di bypassare le transazioni: in pratica ho aggiunto sul web.config un parametro "usa transazioni" che se è impostato a "N" fa si che le varie begintransaction, CommitTransaction ecc. non vengano richiamate. Sui sistemi che mi danno errore, impostando il parametro in modo che il webservice non usi le transazioni, tutto funziona correttamente (ed i dati vengono salvato correttamente sul db).

A questo punto mi sorge il dubbio che ci sia qualche bug o qualche impostazione a livello Oracle/IIS/ASP.NET da calibrare, ma non ho trovato nulla in rete. Qualcuno di voi ha informazioni in questo senso? Una delle versioni di Oracle che mi ha dato problemi è la 9.2.0.5.

Grazie dell'attenzione.
Paolo.
potresti postare qualche riga di codice? l'errore è generico e non specifico per Oracle.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
65 messaggi dal 20 aprile 2004
Marco, grazie innanzitutto della risposta.

Provo a postare qualche estratto dal codice, dato che la gestione del db avviene in una classe molto complessa

Apertura della connessione:
m_oConnectionORA = New OracleConnection(loc_sConnectionString)
m_oConnectionORA.Open()

dove sConnectionString è la stringa di connessione ad Oracle, con il formato:
"Data Source=servername;Pooling=false;USER=username;PASSWORD=password"


Per avviare una transazione viene eseguito il seguente codice:

m_oTransactionORA = m_oConnectionORA.BeginTransaction(IsolationLevel.ReadCommitted)

dove :
m_oTransactionORA As OracleTransaction
m_oConnectionORA As OracleConnection

commit della transazione:

m_oTransactionORA.Commit()

Esecuzione di un comando:

loc_osqlDA.SelectCommand = OracleCommand 'comando costruito con un'apposita routine
loc_osqlDA.Fill(loc_oDataSet, "nometabella")

dove
loc_osqlDA As New OracleDataAdapter

Spero di non aver creato confusione invece di chiarezza.
Grazie di tutto.
Paolo.
Modificato da Kranz il 07 settembre 2006 19.31 -
65 messaggi dal 20 aprile 2004
Problema risolto: trattavasi di bastardissimo errore funzionale
Scusate il disturbo...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.