Я обновляю код из предыдущего проекта. Я хочу отследить любые проблемы в командах 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
утверждение "}