Existe alguma diferença entre SqlCommand.CommandTimeout
e SqlConnection.ConnectionTimeout
no .NET?
Respostas:
Sim. CommandTimeout
é quanto tempo um único comando pode levar para ser concluído. ConnectionTimeout
é quanto tempo pode levar para estabelecer uma conexão com o servidor para começar.
Por exemplo, você pode estar executando consultas de execução relativamente longa - é perfeitamente normal que levem 10 minutos para serem concluídas, mas se demorasse 10 minutos para fazer a conexão para começar, você saberia que algo estava muito errado.
SqlCommand.CommandTimeout
= limite de tempo para sua consulta SQL. Meios, quanto tempo um (por exemplo: SELECT
, UPDATE
) consulta pode demorar para sua execução. Se exceder SqlCommand.CommandTimeout
, interrompe a execução. Ocorrerá um erro de tempo limite do comando.
SqlConnection.ConnectionTimeout
= limite de tempo limite para sua conexão. Significa quanto tempo seu objeto de conexão pode tentar se conectar. Se exceder o tempo especificado, ele para de conectar. Ocorrerá um erro de tempo limite de conexão.
ConnectionTimeout
especifica a duração de espera antes do tempo limite ao tentar abrir um SqlConnection
. É relevante para o Connection.Open()
comando.
enquanto
SqlCommand.CommandTimeout
especificou a duração de um SqlCommand para aguardar antes de atingir o tempo limite. Isso acontece depois que uma conexão é aberta e um dos ExecuteXXX
métodos é chamado no objeto Command.
Informação adicional
O valor padrão CommandTimeout
é 30 segundos. Zero (0) indica que não há limite. Você pode definir o CommandTimeout
valor apenas na codificação.
O valor padrão ConnectiontTimeout
é 15 segundos. Zero (0) indica que não há limite também. Será obtido um valor menor que zero (valor negativo) ArgumentException
. Você pode definir o ConnectionTimeout
valor no arquivo de codificação e configuração.
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Nota rápida sobre CommandTimeout, uma vez que é uma propriedade dos objetos Connection e Command ...
A configuração CommandTimeout em um objeto Connection não tem efeito na configuração CommandTimeout em um objeto Command na mesma Connection; ou seja, a propriedade CommandTimeout do objeto Command não herda o valor do valor CommandTimeout do objeto Connection.
Portanto, a configuração CommandTimeout em um objeto Connection afeta apenas os comandos executados no objeto Connection (sem usar um objeto Command).
Por exemplo, quando você está se conectando a um Stored Proc e adicionando parâmetros ao objeto de comando e executando o objeto Command usando uma conexão do objeto Connection, então você precisa definir CommandTimeout no objeto Command e ConnectionTimeout no objeto Connection para substituir ambos padrões. Definir o CommandTimeout no objeto de conexão não substituirá o tempo limite padrão para os comandos do objeto de comando.
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