.NET içinde SqlCommand.CommandTimeout
ve SqlConnection.ConnectionTimeout
arasında herhangi bir fark var mı ?
Yanıtlar:
Evet. CommandTimeout
tek bir komutun tamamlanmasının ne kadar süreceğidir. ConnectionTimeout
başlamak için sunucuyla bağlantı kurmanın ne kadar süreceğidir.
Örneğin, nispeten uzun süren sorgular yürütüyor olabilirsiniz - tamamlamaları 10 dakika sürmesi tamamen normaldir, ancak bağlantının başlaması 10 dakika sürdüyse, bir şeylerin çok yanlış olduğunu anlarsınız.
SqlCommand.CommandTimeout
= SQL sorgunuz için zaman aşımı sınırı. Means, bir süreyi (örn: SELECT
, UPDATE
) sorgu yürütme için alabilir. Aşarsa SqlCommand.CommandTimeout
, yürütmeyi durdurur. Bir komut zaman aşımı hatası oluşacaktır.
SqlConnection.ConnectionTimeout
= bağlantınız için zaman aşımı sınırı. Bağlantı nesnenizin ne kadar zaman bağlanmaya çalışabileceği anlamına gelir. Belirtilen süreyi aşarsa, bağlanmayı durdurur. Bir bağlantı zaman aşımı hatası oluşacaktır.
ConnectionTimeout
belirtir süresi çalışırken dışarı zamanlama önce beklenecek açmak bir SqlConnection
. Komutla ilgilidir Connection.Open()
.
süre
SqlCommand.CommandTimeout
bir SqlCommand'in zaman aşımına uğramadan önce bekleyeceği süreyi belirtti. Bu, bir bağlantı açıldıktan ve ExecuteXXX
yöntemlerden biri Command nesnesinde çağrıldıktan sonra gerçekleşir.
İlave bilgi
Varsayılan değer CommandTimeout
30 saniyedir. Sıfır (0) sınır olmadığını gösterir. Yalnızca CommandTimeout
Kodlamada değer ayarlayabilirsiniz .
Varsayılan değer ConnectiontTimeout
15 saniyedir. Sıfır (0) da sınır olmadığını gösterir. Sıfırdan küçük değer (eksi değer) alacaktır ArgumentException
. ConnectionTimeout
Hem Kodlama hem de Yapılandırma dosyasında değer ayarlayabilirsiniz .
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Hem Connection hem de Command nesnelerinin bir özelliği olduğu için CommandTimeout ile ilgili hızlı not ...
Bir Connection nesnesindeki CommandTimeout ayarının, aynı Bağlantı üzerindeki bir Command nesnesi üzerindeki CommandTimeout ayarı üzerinde hiçbir etkisi yoktur; diğer bir deyişle, Command nesnesinin CommandTimeout özelliği, Connection nesnesinin CommandTimeout değerinin değerini devralmaz.
Dolayısıyla, bir Connection nesnesindeki CommandTimeout ayarı, yalnızca Connection nesnesi altında yürütülen komutları etkiler (bir Command nesnesi kullanmadan).
Örneğin, Depolanan bir Proc'a bağlanırken ve komut nesnesine parametreler eklerken ve bir Bağlantı Nesnesinin bağlantısını kullanarak Command nesnesini çalıştırırken, her ikisini de geçersiz kılmak için Command nesnesinde CommandTimeout ve Connection nesnesinde ConnectionTimeout ayarlamanız gerekir. varsayılanlar. Bağlantı Nesnesi üzerinde CommandTimeout'u ayarlamak, Komut Nesnesi komutları için varsayılan zaman aşımını geçersiz kılmaz.
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