2013-04-18 15 views
6

Errore di inserimento durante l'inserimento dei record nel database.Errore di transazione Sql

System.Transactions.TransactionException: The operation is not valid for the state of the transaction. ---> System.TimeoutException: Transaction Timeout 
    --- End of inner exception stack trace --- 
    at System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, Transaction atomicTransaction) 
    at System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) 
    at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) 
    at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) 
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 

realtà sto inserimento dei dati nel database con il metodo ambito della transazione, cui codice è descritto di seguito.

TransactionOptions tOptions = new TransactionOptions(); 
tOptions.IsolationLevel = IsolationLevel.ReadCommitted; 
tOptions.Timeout = TransactionManager.MaximumTimeout; 
using (var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew, tOptions)) 
{ 
} 

C'è qualcosa non corretto nella dichiarazione di cui sopra?

Una cosa da ricordare qui è che io sto inserendo i dati di massa in almeno 10 tabelle con un sacco di record e tabelle consentono anche di inserire record duplicati in inserto di massa, la sintassi utilizzata per ottenere questo è indicato di seguito.

CREATE UNIQUE INDEX Index_a ON table1([c1], [c2]) WITH IGNORE_DUP_KEY 

Sarebbe grato se qualcuno potesse aiutarmi con questo problema.

+2

Quale timeout di connessione si sta utilizzando? –

+0

Prova a inserire il codice in un blocco try-catch e controlla l'eccezione nel debugger. Ho fatto questo e qualche volta ho ottenuto maggiori dettagli sul problema, come se un NULL fosse inserito in un campo non nullable, quel genere di cose. – Melanie

+4

La tua operazione ha esito positivo se la esegui senza la transazione? In tal caso, quanto tempo ci vuole per completare senza la transazione? – Nathan

risposta

1

Il problema era che il servizio MSDTC era disabilitato e stavo usando le operazioni bulk db. Dopo averlo abilitato, il problema è stato risolto.

0

Sembra che tu abbia transazioni senza commit. Prova a riavviare il server Sql o il servizio Oracle.

Problemi correlati