2013-04-18 13 views
6

Dostaję poniżej błędu podczas wstawiania rekordów w bazie danych.Błąd transakcji 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() 

Faktycznie wstawiam dane do bazy danych według metody zasięgu transakcji, której kod został opisany poniżej.

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

Czy w powyższym stwierdzeniu jest coś niepoprawnego?

Jedną z rzeczy, o których warto wspomnieć, jest to, że zbiorczo wstawiam dane w co najmniej 10 tabelach z wieloma rekordami i tabelami, a także umożliwiają wstawianie duplikatów rekordów w insertach zbiorczych. Składnia użyta do osiągnięcia tego jest wymieniona poniżej.

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

Będę wdzięczny, jeśli ktoś może mi pomóc w rozwiązaniu tego problemu.

+2

Jakiego limitu czasu połączenia używasz? –

+0

Spróbuj umieścić kod w bloku try-catch i sprawdź wyjątek w debugerze. Zrobiłem to i czasami dostałem więcej szczegółów na temat problemu, jak NULL umieszczany w nie-zerowalnym polu, tego rodzaju rzeczy. – Melanie

+4

Czy operacja zakończy się pomyślnie, jeśli uruchomisz ją bez transakcji? Jeśli tak, to ile czasu zajmuje ukończenie transakcji? – Nathan

Odpowiedz

1

Problem polegał na tym, że usługa MSDTC została wyłączona i korzystałem z luźnych operacji db. Po włączeniu problem został rozwiązany.

0

Wygląda na to, że masz niezakończone transakcje. Spróbuj ponownie uruchomić serwer SQL lub usługę Oracle.

Powiązane problemy