在 ado.net 的任何地方捕获 sql 的 table 锁定异常
Catch table lock exception for sql anywhere ado.net
用 ado.net 和 iAnywhere.Data.SqlAnywhere.EF6
捕获 table 锁定异常的最佳方法是什么?我的问题是,command.ExecuteNonQuery
导致 SAException
包含消息,即用户已锁定 table.
中的所有行
问题是,它是一个通用的 SAException
,而不是像 SATableLockException
这样的特定的,这很好。
现在的问题是:如何在不使用错误消息的情况下检测到错误是 table 锁定异常?
非常感谢!
好的,我找到了解决方案。我只是将异常转换为 SAException
并使用了 Error-Code 属性 (谢谢@tzup):
示例:
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... }
}
用 ado.net 和 iAnywhere.Data.SqlAnywhere.EF6
捕获 table 锁定异常的最佳方法是什么?我的问题是,command.ExecuteNonQuery
导致 SAException
包含消息,即用户已锁定 table.
问题是,它是一个通用的 SAException
,而不是像 SATableLockException
这样的特定的,这很好。
现在的问题是:如何在不使用错误消息的情况下检测到错误是 table 锁定异常?
非常感谢!
好的,我找到了解决方案。我只是将异常转换为 SAException
并使用了 Error-Code 属性 (谢谢@tzup):
示例:
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... }
}