Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wątki i SqlFileStream. Proces nie może uzyskać dostępu do określonego pliku, ponieważ został on otwarty w innej transakcji

Transakcja nie wpływa do Parallel.ForEach , musisz ręcznie wprowadzić transakcję.

//Switched to a thread safe collection.
var documents = new ConcurrentQueue<ExtractedContent>();
using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    var attachments = await dao.GetAttachmentsAsync();
    //Grab a reference to the current transaction.
    var transaction = Transaction.Current;
    Parallel.ForEach(attachments, a =>
    {
        //Spawn a dependant clone of the transaction
        using (var depTs = transaction.DependentClone(DependentCloneOption.RollbackIfNotComplete))
        {
            documents.Enqueue(a.ToDbDocument());
            depTs.Complete();
        }
    });

    ts.Complete();
}

Przełączyłem się również z List<ExtractedContent> do ConcurrentQueue<ExtractedContent> ponieważ nie możesz wywołać .Add( na liście z wielu wątków jednocześnie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Zastąp część kolumny w wielu wierszach na podstawie drugiej tabeli

  2. przekazanie operandu jako parametru sql

  3. Filtr dodawania SQL tylko wtedy, gdy zmienna nie jest pusta

  4. Odczytywanie i zwiększanie wartości int w SQL Server

  5. SQL WYBIERZ GG:MM - GG:MM