首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#捕获OracleException与一般异常

C#捕获OracleException与一般异常
EN

Stack Overflow用户
提问于 2019-04-05 20:00:02
回答 1查看 1.3K关注 0票数 0

我正在更新一个先前项目的代码。我想捕捉SQL命令中的任何问题,所以我在SQL查询的开头放了一个"X“。在微软,通常SqlException会发现这样的问题。在下面的代码中,我得到的是一般异常,而不是OracleException。我是否有适当的例外,如果有,为什么不开火?

代码语言:javascript
复制
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;
}

经修订的守则:

代码语言:javascript
复制
    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;
}

最后一个错误是:

{“异常: getSKUByPONumberfailed与错误代码: getOracleSingleValue失败与错误代码: ORA-00900:无效SQL语句”}

EN

回答 1

Stack Overflow用户

发布于 2019-04-05 20:27:05

问题在于,您正在调用自己的getOracleSingleValue()例程。这个例程必须抛出一个异常,以便捕获任何异常。这看起来像是我怀疑的自定义(非Oracle)函数。看看那个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55542585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档