Verarbeitet SqlConnection Abfragen parallel?

8

Wenn ich eine SqlConnection für einen SQL Server öffne und dann mehrere Abfragen von mehreren Hintergrundthreads ausgabe, die alle diese eine Verbindung verwenden - werden diese Abfragen nacheinander ausgeführt (kümmert sich nicht um die Reihenfolge)?

Wenn ich am Anfang einer Abfrage die Isolationsstufe ändere und sie dann am Ende dieser Abfrage wiederherstelle, besteht die Möglichkeit, dass diese Isolationsstufe auf andere Abfragen angewendet wird.

Ich denke nicht, aber ich möchte bestätigen.

SQL Server 2008 R2

Und ich spreche von System.Data.SqlClient.SqlConnection

    
THX-1138 22.07.2015, 15:32
quelle

1 Antwort

1

Geladene Frage, eine definitive Antwort ist unmöglich, weil @ LasseV.Karlsen erklärt hat, dass SqlConnection nicht threadsicher ist, also wird Verhalten unberechenbar sein. Ich habe in der Vergangenheit ähnliche Szenarien versucht und ist gescheitert. Hier ist, was ich denke, wird mit den Parametern in Ihrer Frage passieren.

  

Verarbeitet SqlConnection Abfragen parallel?

Nein, es weiß nicht wie, weil es nicht für diese Aufgabe entworfen wurde. Obwohl die Tatsache, dass es möglich ist, einen Prozess zu bauen, um es auf diese Weise zu verwenden, verlockend ist.

  

werden diese Abfragen nacheinander ausgeführt

Ja. Die Abfragen werden von der SQL-Engine in der Reihenfolge ausgeführt, in der sie empfangen wurden. Obwohl Ihr Verbindungsobjekt wahrscheinlich nicht wissen wird, an welchen Thread die Ergebnisse zurückgegeben werden sollen, erhalten Sie den gefürchteten "Objektreferenzfehler".

  

besteht die Möglichkeit, dass diese Isolationsstufe auf andere Abfragen angewendet werden kann

Ja. Wenn Sie die Isolationsstufe des Transaktionsobjekts ändern, das Ihrer SqlConnection zugewiesen ist, und einer Ihrer Threads versucht, diese Verbindung zu verwenden, wird diese Isolationsstufe standardmäßig verwendet. Der Zeitpunkt, an dem ein sekundärer Thread dies tut, liegt zu diesem Zeitpunkt außerhalb Ihrer Kontrolle. Sie können eine Transaktion pro Befehl zuweisen (und dadurch eine eindeutige Isolationsstufe erreichen, wie gewünscht), aber das Problem der Verbindung ist weiterhin nicht threadsicher.

    
Chris 27.07.2015 15:30
quelle