재귀 루프를 사용하여 SQL Server 2005 데이터베이스에 항목을 삽입하는 루틴이 있습니다. 루프를 시작하는 첫 번째 호출은 TransactionScope를 사용하여 트랜잭션 내에 포함됩니다. 처음 ProcessItem을 호출하면 myItem 데이터가 예상대로 데이터베이스에 삽입됩니다. 그러나 ProcessItemLinks 또는 ProcessItemComments에서 호출 될 때 다음 오류가 발생합니다.왜 TransactionScope 작업이 유효하지 않습니까?
는
나는 윈도우 7에 VS 2008 디버깅이를 실행하고 "작업은 트랜잭션의 상태에 대해 유효하지 않습니다"와 MSDTC는 분산 트랜잭션을 사용하는 실행했다. 아래 코드는 제 제작 코드가 아니지만 정확히 동일하게 설정되어 있습니다. AddItemToDatabase는 수정할 수없는 클래스의 메서드이며 표준 ExecuteNonQuery()를 사용하여 연결을 만든 다음 완료되면 처리하고 닫습니다.
다른 게시글을 인터넷에서 보았지만 여전히이 문제를 해결할 수 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다.
using (TransactionScope processItem = new TransactionScope())
{
foreach (Item myItem in itemsList)
{
ProcessItem(myItem);
}
processItem.Complete();
}
private void ProcessItem(Item myItem)
{
AddItemToDatabase(myItem);
ProcessItemLinks(myItem);
ProcessItemComments(myItem);
}
private void ProcessItemLinks(Item myItem)
{
foreach (Item link in myItem.Links)
{
ProcessItem(link);
}
}
private void ProcessItemComments(Item myItem)
{
foreach (Item comment in myItem.Comments)
{
ProcessItem(comment);
}
}
여기는 스택 추적의 상단 부분입니다. 불행하게도이 시점까지 내가 공개 할 수없는 회사의 민감한 정보로 보여줄 수는 없습니다.
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.SqlClient.SqlInternalConnection.Enlist(Transaction tx)
at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)
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()
당신이 스택 추적을 게시 할 수 예외? –
허용되는만큼 추적을 추가했습니다. 희망은 충분하다! – Cragly
전체 예외를 게시 할 수 있습니까? ex.ToString()의 출력을 게시 한 다음 중요한 내용을 수정하십시오. InnerException 또는 2가 있는지 궁금하네요. –