Có sự khác biệt nào giữa SqlCommand.CommandTimeout
và SqlConnection.ConnectionTimeout
trong .NET không?
Câu trả lời:
Đúng. CommandTimeout
là bao lâu một lệnh có thể hoàn thành. ConnectionTimeout
là thời gian có thể bắt đầu kết nối với máy chủ.
Ví dụ: bạn có thể đang thực hiện các truy vấn tương đối dài - hoàn toàn ổn nếu chúng mất 10 phút để hoàn thành, nhưng nếu mất 10 phút để bắt đầu kết nối, bạn sẽ biết rằng đã có điều gì đó không ổn.
SqlCommand.CommandTimeout
= giới hạn thời gian chờ cho truy vấn SQL của bạn. Phương tiện, bao nhiêu thời gian một (ví dụ: SELECT
, UPDATE
) truy vấn có thể lấy để thực hiện nó. Nếu vượt quá SqlCommand.CommandTimeout
, thì nó sẽ ngừng thực thi. Lỗi hết thời gian lệnh sẽ xảy ra.
SqlConnection.ConnectionTimeout
= giới hạn thời gian chờ cho kết nối của bạn. Có nghĩa là, đối tượng kết nối của bạn có thể cố gắng kết nối trong bao lâu. Nếu vượt quá thời gian quy định, nó sẽ ngừng kết nối. Lỗi hết thời gian kết nối sẽ xảy ra.
ConnectionTimeout
chỉ định khoảng thời gian chờ trước khi hết thời gian khi cố gắng mở một SqlConnection
. Nó có liên quan đến Connection.Open()
lệnh.
trong khi
SqlCommand.CommandTimeout
đã chỉ định khoảng thời gian để một SqlCommand đợi trước khi hết thời gian. Điều này xảy ra sau khi một kết nối đã được mở và một trong các ExecuteXXX
phương thức đã được gọi trên đối tượng Command.
Thông tin bổ sung
Giá trị mặc định của CommandTimeout
là 30 giây. Số không (0) cho biết không có giới hạn. Bạn chỉ có thể đặt CommandTimeout
giá trị trong Mã hóa.
Giá trị mặc định của ConnectiontTimeout
là 15 giây. Số không (0) cũng cho biết không có giới hạn. Giá trị nhỏ hơn 0 (giá trị trừ) sẽ nhận được ArgumentException
. Bạn có thể đặt ConnectionTimeout
giá trị trong cả tệp Coding và Config.
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Lưu ý nhanh về CommandTimeout, vì nó là thuộc tính của cả đối tượng Connection và Command ...
Cài đặt CommandTimeout trên đối tượng Connection không ảnh hưởng đến cài đặt CommandTimeout trên đối tượng Command trên cùng một kết nối; nghĩa là, thuộc tính CommandTimeout của đối tượng Command không kế thừa giá trị của giá trị CommandTimeout của đối tượng kết nối.
Vì vậy, cài đặt CommandTimeout trên một đối tượng Connection chỉ ảnh hưởng đến các lệnh được thực thi bên dưới đối tượng Connection mà thôi (không sử dụng đối tượng Command).
ví dụ: Khi bạn đang kết nối với một Stored Proc và thêm các tham số vào đối tượng lệnh và thực thi đối tượng Lệnh bằng cách sử dụng kết nối của Đối tượng Kết nối, thì bạn cần đặt CommandTimeout trên đối tượng Lệnh và ConnectionTimeout trên đối tượng Kết nối để ghi đè cả hai giá trị mặc định. Đặt CommandTimeout trên Đối tượng Kết nối sẽ không ghi đè thời gian chờ mặc định cho các lệnh Đối tượng Lệnh.
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/en-us / sql / ado / reference / ado-api / Connectiontimeout-property-ado? view = sql-server-ver15