Nachdem eine Read Uncommitted-Abfrage, muss ich haben, um es zurück zu Verpflichtet?
Vorstellen ausführen einer Abfrage mithilfe von code ähnlich wie diese hier:
using (SqlConnection TheConnection = GetSqlConnectionNoCatch(SQLConnectionStr))
using (SqlDataAdapter TheDataAdapter = new SqlDataAdapter(SQLStatement, TheConnection) { MissingSchemaAction = SchemaAction })
{
DataSet TheDataSet = new DataSet();
TheDataAdapter.SelectCommand.CommandTimeout = SQLTimeout;
TheDataAdapter.Fill(TheDataSet, TableName);
return TheDataSet;
}
Und sich vorstellen, dass zum Lesen einer Datenbank-Tabelle, die ist absolut geschlagen, non-stop, mit schreiben, das führt zu einer Menge von deadlocks und Ausfälle, so dass Sie durchführen müssen, dass Lesen mit einem Read Uncommitted-Isolationsstufe.
Wenn meine normale Abfrage:
SELECT Field1, Field2 FROM Table WHERE some_type_of_clause
Sehe ich oft, Sie würden es zu ändern:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT Field1, Field2 FROM Table WHERE some_type_of_clause
OK, also hier ist, was führte mich zu Fragen, diese Frage, dieser link: http://blog.sqlauthority.com/2011/04/17/sql-server-applying-nolock-hint-at-query-level-nolock-for-whole-transaction/
Seinem Beispiel die folgenden:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT *
FROM AdventureWorks.Sales.SalesOrderDetail sod
INNER JOIN AdventureWorks.Sales.SalesOrderHeader soh ON
sod.SalesOrderID = soh.SalesOrderID
ORDER BY sod.ModifiedDate
-- Set isolation level to original isolation level
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Tun, ich brauche, um es wieder zu LESEN ist VERPFLICHTET, am Ende meiner Abfrage auch? Oder ist mein read uncommitted nur gut für die, die eine Abfrage? Oder vielleicht ist die Lebensdauer der Verbindung (welche Prüfung mein code würde bedeuten, sobald ich zurück DataSet, als meine Verbindung schließt, dann rechts)?
Meisten Beispiele auf der web-verlassen Sie die "legen Sie es zurück zu den ursprünglichen isolation level", also es verwirrt mich, dass er eingeschlossen. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort hier hilfreich sein können: MIT (NOLOCK) vs SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Die Isolationsstufe der Transaktion wird eine Verbindung-level-Einstellung. Dies bedeutet, dass verschachtelte Aufrufe von gespeicherten Prozeduren, etc, verwenden Sie Ihre neue isolation-level-Einstellung, aber andere user/query-windows/Sitzung aus den gleichen Benutzer verwenden die jeweiligen default (oder was auch immer zuletzt eingestellt war).
In Ihrem Fall, Sie sind nicht erforderlich, um die Isolationsstufe zurück zu verpflichtet, es sei denn, Sie haben andere Anweisungen oder Datensätze zurück, die nicht benutzen sollte ungebunden später in der gleichen Sitzung. Das zurücksetzen ist einfach eine gute Praxis.