Hãy tưởng tượng thực hiện một truy vấn sử dụng mã tương tự như sau đây:Sau truy vấn Đọc không được cam kết, tôi có phải đặt lại nó thành Cam kết không?
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;
}
Và tưởng tượng cần phải đọc một bảng cơ sở dữ liệu là hoàn toàn bị đập, không ngừng, với ghi, dẫn đến rất nhiều bế tắc và thất bại do đó bạn phải thực hiện việc đọc đó bằng cách sử dụng cấp độ cách ly đọc không cam kết.
Nếu truy vấn bình thường của tôi là:
SELECT Field1, Field2 FROM Table WHERE some_type_of_clause
Tôi thường thấy rằng bạn sẽ thay đổi nó thành:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT Field1, Field2 FROM Table WHERE some_type_of_clause
OK, vì vậy đây là những gì dẫn tôi đến hỏi câu hỏi này, liên kết đặc biệt này: http://blog.sqlauthority.com/2011/04/17/sql-server-applying-nolock-hint-at-query-level-nolock-for-whole-transaction/
dụ của ông có những điều sau đây:
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
Tôi có cần đặt lại cho READ COMMITTED ở cuối truy vấn của mình không? Hoặc là đọc của tôi không cam kết chỉ tốt cho một truy vấn? Hoặc có lẽ cuộc đời của kết nối (kiểm tra mã của tôi sẽ có nghĩa là ngay sau khi tôi trả lại DataSet, vì Connection của tôi đóng ngay sau đó)?
Hầu hết các ví dụ trên web sẽ thoát khỏi 'đặt nó trở về mức cách ly ban đầu', vì vậy tôi đã làm tôi bối rối rằng anh đã bao gồm nó. Cảm ơn!
Cảm ơn bạn rất nhiều vì đã phản hồi - dấu kiểm màu xanh lục và thư giới thiệu! – JustLooking