.net 捕获Oracle超时异常

.net 捕获Oracle超时异常,.net,database,oracle,timeout,.net,Database,Oracle,Timeout,我希望以不同于其他SQL异常的方式处理超时异常,就像 但是,我们的应用程序同时支持Oracle和MSSqlserver 该解决方案将理想地涵盖两个提供程序:System.Data.OracleClient和Oracle.DataAccess.Client 这些异常引发的异常的错误代码是什么?使用void setquerytimeoutit seconds引发SQLException;可能有效;但这可能会导致使用Oracle jdbc驱动程序执行的每个sql都创建线程,因此请谨慎使用 /**

我希望以不同于其他SQL异常的方式处理超时异常,就像

但是,我们的应用程序同时支持Oracle和MSSqlserver

该解决方案将理想地涵盖两个提供程序:System.Data.OracleClient和Oracle.DataAccess.Client

这些异常引发的异常的错误代码是什么?

使用void setquerytimeoutit seconds引发SQLException;可能有效;但这可能会导致使用Oracle jdbc驱动程序执行的每个sql都创建线程,因此请谨慎使用

/**
 * Sets the number of seconds the driver will wait for a 
 * <code>Statement</code> object to execute to the given number of seconds.
 * If the limit is exceeded, an <code>SQLException</code> is thrown. A JDBC
 * driver must apply this limit to the <code>execute</code>,
 * <code>executeQuery</code> and <code>executeUpdate</code> methods. JDBC driver
 * implementations may also apply this limit to <code>ResultSet</code> methods
 * (consult your driver vendor documentation for details).
 *
 * @param seconds the new query timeout limit in seconds; zero means 
 *        there is no limit
 * @exception SQLException if a database access error occurs, 
 * this method is called on a closed <code>Statement</code>
 *            or the condition seconds >= 0 is not satisfied
 * @see #getQueryTimeout
 */
void setQueryTimeout(int seconds) throws SQLException;

这就是我最终得到的结果,类似于:

但是,超时的错误代码似乎是01013

StaticMembersDynamicWrapper,如中所述:


我不想硬引用Oracle程序集,所以我使用了它。

我不使用Java,设置超时不是问题所在。问题是对超时的反应。非常抱歉,是我的错,我没有注意到.Net部分
    /// <summary>
    ///     Catches network problems for oracle connections and clears the session pool of invalid connections
    /// </summary>
    /// <param name="ex"></param>
    /// <param name="triedBefore"></param>
    /// <returns></returns>
    private bool reconnectOracle(DbException ex)
    {
        var exType = ex.GetType();
        if (exType.FullName == "Oracle.DataAccess.Client.OracleException")
        {
            dynamic exOra = ex;
            int errorNo = exOra.Number;
            // Check for oracle network error numbers
            if (errorNo == 03113 ||
                errorNo == 03114 || 
                errorNo == 03135) // **Timeout seems to be 01013**
            {
                AL.Warn("Connection is broken. Error number: {0}. Attempting reconnect.", errorNo);
                // Network error, close connection
                Command.Connection.Close();

                // All connections in the pool are probably invalid. Ensure that all connections are cleared
                dynamic con = new StaticMembersDynamicWrapper(Command.Connection.GetType());
                con.ClearAllPools();

                // Ensure that new connection object is given
                Command.Connection = null;

                return true;
            }
        }
        return false;
    }