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.
Quale timeout di connessione si sta utilizzando? –
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
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