Necesito detectar específicamente las excepciones de tiempo de espera del servidor SQL para que puedan manejarse de manera diferente. Sé que podría detectar la SqlException y luego verificar si la cadena del mensaje contiene "Timeout", pero me preguntaba si hay una mejor manera de hacerlo.
try
{
//some code
}
catch (SqlException ex)
{
if (ex.Message.Contains("Timeout"))
{
//handle timeout
}
else
{
throw;
}
}
c#
.net
sql-server
error-handling
Brodie
fuente
fuente
Respuestas:
Para verificar un tiempo de espera, creo que verifica el valor de, por ejemplo, Número. Si es -2, entonces tiene una situación de tiempo de espera.
-2 es el código de error para el tiempo de espera, devuelto por DBNETLIB, el controlador MDAC para SQL Server. Esto se puede ver descargando Reflector y buscando en System.Data.SqlClient.TdsEnums para TIMEOUT_EXPIRED.
Su código leería:
Código para demostrar falla:
fuente
aquí: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.adonet/2006-10/msg00064.html
También puede leer que Thomas Weingartner escribió:
...
fuente
Actualizado para c # 6:
Muy simple y agradable a la vista !!
fuente
¿Cuál es el valor de la propiedad SqlException.ErrorCode? ¿Puedes trabajar con eso?
Cuando tenga tiempos de espera, puede que valga la pena comprobar el código -2146232060 .
Configuraría esto como una constante estática en su código de datos.
fuente
No estoy seguro, pero cuando hemos ejecutado el tiempo de espera o el tiempo de espera del comando, el cliente envía un "ABORT" a SQL Server y luego simplemente abandona el procesamiento de la consulta. No se revierte ninguna transacción, no se liberan bloqueos. para resolver este problema, elimino la transacción en el procedimiento almacenado y uso la transacción SQL en mi código .Net para administrar sqlException
fuente
Cuando un cliente envía ABORT, no se revierte ninguna transacción. Para evitar este comportamiento tenemos que usar SET_XACT_ABORT ON https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xact-abort-transact-sql?view=sql-server-ver15
fuente