C # Catch OracleException против общего исключения - PullRequest
0 голосов
/ 05 апреля 2019

Я обновляю код из предыдущего проекта. Я хочу отследить любые проблемы в командах SQL, поэтому я ставлю «X» в начале запроса SQL. В Microsoft обычно SqlException улавливает такие проблемы. В приведенном ниже коде я получаю общее исключение, а не OracleException. У меня есть правильное исключение, и если да, то почему не стрельба?

public static string getSKUByPONumber(string poNumber)
{
    Logging.logMethodStart("getSKUByPONumber poNumber=" + poNumber);

    string rt = "";
    string sql = "x select i.segment1 || '.' || i.segment2 " +
                 " from po_headers_all h " +
                 " inner join po.po_lines_all l on( h.po_header_id = l.po_header_id ) " +
                 " inner join inv.mtl_system_items_b i on( l.item_id = i.inventory_item_id ) " +
                 " where h.segment1 = '" + poNumber.Trim() + "'";

    try
    {
        rt = getOracleSingleValue(sql);
    }
    catch (OracleException ex)
    {
        string errMsg = "OracleException: getSKUByPONumber failed with error code: " + ex.Message + " Sql=" + sql;
        Logging.logHelperError("getSKUByPONumber", ex.Message);
        Logging.TraceWriteLine(errMsg); 
        throw new Exception(errMsg);
    }
    catch (Exception ex)
    {
        Logging.logHelperError("getSKUByPONumber", ex.Message);
        throw new Exception("getSKUByPONumber failed with error code: " + ex.Message + " Sql=" + sql );
    }

    Logging.logMethodEnd("getSKUByPONumber poNumber=" + poNumber + " sku=" + rt);
    return rt;
}

Пересмотренный код:

    public static string getOracleSingleValue(string sql)
    {
        OracleConnection conn = Config.GetOracleSqlconnection();
        string rt = "";

        try
        {
            DataSet ds = new DataSet();
            OracleDataAdapter adapter = new OracleDataAdapter(sql, conn);
            OracleCommandBuilder builder = new OracleCommandBuilder(adapter);

            adapter.Fill(ds, "data");

            if (ds.Tables["data"].Rows.Count > 0)
            {
                DataRow row = ds.Tables["data"].Rows[0];
                rt = row[0].ToString();
            }
        }
        catch (SqlException ex)
        {
            Logging.logHelperError("getOracleSingleValue: SqlException:", ex.Message);
            throw new Exception("getOracleSingleValue failed with SqlException: " + ex.Message);
        }
        catch (Exception ex)
        {
            Logging.logHelperError("getOracleSingleValue", ex.Message);
            throw new Exception("getOracleSingleValue failed with error code: " + ex.Message);
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }

        return rt;
    }



public static string getSKUByPONumber(string poNumber)
{
    Logging.logMethodStart("getSKUByPONumber poNumber=" + poNumber);

    string rt = "";
    string sql = "x select i.segment1 || '.' || i.segment2 " +
                 " from po_headers_all h " +
                 " inner join po.po_lines_all l on( h.po_header_id = l.po_header_id ) " +
                 " inner join inv.mtl_system_items_b i on( l.item_id = i.inventory_item_id ) " +
                 " where h.segment1 = '" + poNumber.Trim() + "'";

    try
    {
        rt = getOracleSingleValue(sql);
    }
        catch (SqlException ex)
        {
            string errMsg = "SqlException: getDropShipFlag failed with error code: " + ex.Message + " sql=" + sql;
            Logging.TraceWriteLine(errMsg);
            Logging.logHelperError("getDropShipFlag", ex.Message);
            throw new Exception(errMsg);
        }
        catch (Exception ex)
        {
            string innerExMessage = ""; 
            if (ex.InnerException != null)
            {
                innerExMessage = ex.Message + " Internal Exception:" + ex.InnerException; 
            }
            Logging.logHelperError("getDropShipFlag", ex.Message + innerExMessage);
            throw new Exception("Exception: getDropShipFlag failed with error code: " + ex.Message);
        }

    Logging.logMethodEnd("getSKUByPONumber poNumber=" + poNumber + " sku=" + rt);
    return rt;
}

Окончательная ошибка:

{"Исключение: получен getSKUByPON с кодом ошибки: Ошибка getOracleSingleValue с кодом ошибки: ORA-00900: неверный SQL утверждение "}

1 Ответ

0 голосов
/ 05 апреля 2019

Проблема в том, что вы вызываете подпрограмму собственного getOracleSingleValue ().Эта процедура должна вызвать исключение для вас, чтобы перехватить любые исключения.Это похоже на пользовательскую (не Oracle) функцию, которую я подозреваю.Проверьте это.

...