2015-08-07 5 views
1

Quelle est la meilleure façon, pour attraper une exception de verrouillage de table avec ado.net et iAnywhere.Data.SqlAnywhere.EF6? Mon problème est que command.ExecuteNonQuery provoque un SAException qui contient le message, qu'un utilisateur a verrouillé toutes les lignes dans une table.Catch exception de verrouillage de table pour sql n'importe où ado.net

Le problème est, que c'est un général SAException, pas un spécifique comme SATableLockException, ce qui serait bien.

Maintenant la question: comment détecter sans utiliser le message d'erreur, que l'erreur est une exception de verrouillage de table?

Merci beaucoup!

+0

Regarder SQL Anywhere 16 référence API NET Je ne peux pas trouver un SATableLockException, par conséquent, je ne suis pas sûr s'il est possible de détecter l'erreur sans consulter la liste SAError de la propriété Errors de la classe SAException. – tzup

Répondre

0

Ok, j'ai trouvé une solution pour cela. Je lance simplement l'exception à SAException et UserD l'erreur de code propriété (merci @tzup):

Exemple:

try 
{ 
    // Maybe some sa-exception occurse 
} 
catch (Exception ex) 
{ 
    if (ex is iAnywhere.Data.SQLAnywhere.SAException) 
    { 
     var saException = (iAnywhere.Data.SQLAnywhere.SAException)ex; 

     // Only catch table locks 
     if (saException.NativeError == -210 || saException.ErrorCode == -210 
      || saException.NativeError == -1281 || saException.ErrorCode == -1281) 
     { 
      // Table lock here! 
     } 
    } 
    else { // do some thing else... } 
}