Представьте выполнение запроса, используя код, подобный этому здесь:После запроса Read Uncommitted, нужно ли вернуть его в Committed?
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;
}
И представьте себе, чтобы читать таблицу базы данных, абсолютно получать толченый, нон-стоп, с записями, что приводит к большому количеству тупиков и неудач поэтому вы должны выполнить это чтение, используя уровень Read Uncommitted Isolation.
Если мой обычный запрос был:
SELECT Field1, Field2 FROM Table WHERE some_type_of_clause
Я часто вижу, что вы бы изменить его на:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT Field1, Field2 FROM Table WHERE some_type_of_clause
ОК, так вот что заставило меня задать этот вопрос, именно эту ссылку: http://blog.sqlauthority.com/2011/04/17/sql-server-applying-nolock-hint-at-query-level-nolock-for-whole-transaction/
Его пример имеет следующее:
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
Должен ли я установить его обратно в READ COMMITTED в конце моего запроса? Или мой прочитанный uncommitted только хорошо для этого одного запроса? Или, может быть, жизнь связи (которая рассматривает мой код будет означать, как только я верну DataSet, так как мое соединение закрывается тогда)?
Большинство примеров в Интернете не учитывают «установите его на исходный уровень изоляции», поэтому меня озадачило, что он включил его. Благодаря!
Большое спасибо за отзыв - зеленая галочка и надпись! – JustLooking