簡體   English   中英

C#Catch OracleException vs General Exception

[英]C# Catch OracleException vs General Exception

我正在更新之前項目的代碼。 我想在SQL命令中捕獲任何問題,所以我在SQL查詢的開頭放了一個“X”。 在Microsoft中,通常SqlException會捕獲此類問題。 在下面的代碼中,我得到了一般的Exception而不是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;
}

最后的錯誤是:

{“異常:getSKUByPONumber失敗,錯誤代碼:getOracleSingleValue失敗,錯誤代碼:ORA-00900:無效的SQL語句”}

問題是你正在調用自己的getOracleSingleValue()例程。 此例程必須拋出異常以捕獲任何異常。 這看起來像我懷疑的自定義(非Oracle)功能。 檢查一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM