抓住超时例外

时间:2015-11-19 10:16:43

标签: c# oracle c#-4.0

我试图捕获Oracle中是否发生超时错误。谷歌搜索后,我没有找到任何具体的解决方案。我在下面做了

 try{}
   catch (OracleException ex)
    {
        if (ex.Number == 01013)
           CatchException(ex);

    }

但我不确定超时异常编号是否为01013。

2 个答案:

答案 0 :(得分:2)

是的,代码是01013.请参考Oracle docs

  

默认值为0秒,不会强制执行时间限制。

     

当指定的超时值在命令执行之前到期时   完成后,命令尝试取消。如果取消是   成功,使用ORA-01013 :user的消息抛出异常   要求取消当前的操作。如果命令及时执行   没有任何错误,不会抛出任何异常。

     

在多个OracleCommand对象使用相同的情况下   连接,其中一个OracleCommand对象的超时到期   可以终止单个连接上的任何执行。要做   OracleCommand的超时到期仅取消其自己的命令   执行,如果是这样,只需为每个连接使用一个OracleCommand   OracleCommand将CommandTimeout属性设置为大于的值   0

答案 1 :(得分:0)

请注意,超过.CommandTimeout时可能还会抛出另外两个错误代码。它们是ORA-00936ORA-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);
}