Все исключения оракула обрабатываются ODP, и все они выбрасывают OracleException
try{ . . . }
catch(OracleException ex){ . . . }
Каждое исключение оракула имеет свойство Message
, которое будет отображать простое старое сообщение Oracle, например
ORA-00600: внутренний код ошибки, аргументы
Если у вас есть проблемы с сетью, вы получите либо стандартные исключения Oracle, например,
ORA-12154: TNS:не удалось разрешить указанный идентификатор подключения
Или тайм-аут вашего провайдера.
Похоже, вам нужна очередь, которую можно сериализовать в случае отключения питания или чего-то подобного.Не сохраняйте sql, сохраняйте работу.Например, сериализуемый объект, который имеет все значения для вашей работы, а затем некоторый код, который можно использовать для запуска вызова БД.Например,
[Serializable]
public class CrudRequestModel
{
public string Prop1 {get; set;}
public string Prop2 {get; set;}
. . . . .
}
public class CrudRequestProcessor
{
public CrudRequestProcessor(CrudRequestModel m) {. . . }
public bool Persist()
{
// code that will execute DB call
}
public bool SaveQueue(QueueConfig conf)
{
// code that will serialize and save model to file or whatever if DB call fails
}
}
Таким образом, ваш код будет выглядеть так:
var proc = new CrudRequestProcessor(model);
if (!proc.Persist())
proc.SaveQueue(config);
Обратите внимание, SaveQueue
может быть расширением, чтобы повысить уровень единоличной ответственности.