la forma de detectar el tiempo de espera del servidor SQL de la aplicación .NET sin necesidad de utilizar la captura de excepciones

StackOverflow https://stackoverflow.com/questions/2719234

Pregunta

En mi aplicación actual, estoy realizando una actualización mediante la invocación de comandos T-SQL de actualización. El problema es cuando el mismo registro está bloqueado por otros usuarios en ese momento.

En la aplicación .NET, la aplicación va a esperar hasta que el tiempo de espera de SQL Server, a continuación, se lanzará el tiempo de espera SqlException.

¿Es posible realizar una comprobación en primer lugar si un determinado registro está bloqueado por otro proceso en lugar de agarrar la excepción?

¿Fue útil?

Solución

No, no realmente.

La forma habitual es utilizar try/catch y mango SqlException Número 1205 (punto muerto víctima), y vuelva a intentar su consulta:

    try
    {
        // do stuff...
    }
    catch (SqlException sqlEx)
    {
        switch (sqlEx.Number)
        {
            case -2:   // Client Timeout
            case 701:  // Out of Memory
            case 1204: // Lock Issue 

            case 1205: // >>> Deadlock Victim
                // handle deadlock
                break;

            case 1222: // Lock Request Timeout
            case 2627: // Primary Key Violation
            case 8645: // Timeout waiting for memory resource 
            case 8651: // Low memory condition 
            ...
        }
    }

[Nota: las sentencias break no se añaden a la compacidad

nota también , muchos problemas de bloqueo puede ser eliminada, proporcionando la adecuada relativa a los índices.

Otros consejos

Se podría usar una conexión independiente con muy poco tiempo de espera para intentar bloquear el registro mediante la actualización de algún campo, pero esto todavía no se va a dar el 100% de fiabilidad.

si realmente tiene la situación con múltiples usuarios edición mismos registros, se deberán tener en cuenta las técnicas de bloqueo optimista.

Además, asegúrese de que no permiten a los usuarios bloquear los registros en todos - el uso modo desconectado para cualquier actualización. En otras palabras, el bloqueo ocurrirá solamente por un corto tiempo de actualización (<100 ms)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top