我试图捕获Oracle中是否发生超时错误。谷歌搜索后,我没有找到任何具体的解决方案。我在下面做了
try{}
catch (OracleException ex)
{
if (ex.Number == 01013)
CatchException(ex);
}
但我不确定超时异常编号是否为01013。
答案 0 :(得分:2)
是的,代码是01013.请参考Oracle docs:
默认值为0秒,不会强制执行时间限制。
当指定的超时值在命令执行之前到期时 完成后,命令尝试取消。如果取消是 成功,使用ORA-01013 :user的消息抛出异常 要求取消当前的操作。如果命令及时执行 没有任何错误,不会抛出任何异常。
在多个OracleCommand对象使用相同的情况下 连接,其中一个OracleCommand对象的超时到期 可以终止单个连接上的任何执行。要做 OracleCommand的超时到期仅取消其自己的命令 执行,如果是这样,只需为每个连接使用一个OracleCommand OracleCommand将CommandTimeout属性设置为大于的值 0
答案 1 :(得分:0)
请注意,超过.CommandTimeout
时可能还会抛出另外两个错误代码。它们是ORA-00936
和ORA-00604
。在docs中找到。
当指定的超时值在命令执行完成之前到期时,命令将尝试取消。如果取消成功,则会出现异常消息 ORA-01013 :用户请求取消当前操作。命令超时到期后引发的其他可能异常包括 ORA-00936 和 ORA-00604 。如果命令及时执行而没有任何错误,则不会引发异常。
因此您的代码应为:
try
{
// Data Access
}
catch (OracleException ex)
{
if (ex.Number == 01013 || ex.Number == 00936 || ex.Number == 00604)
CatchException(ex);
}