Arhn - архитектура программирования

ExecuteNonQuery не генерирует исключение при вставке

Я использую OracleCommand.ExecuteNonQuery() для вставки в таблицу. Все работает нормально, но иногда записи не вставляются. Так возможно ли, что ExecuteNonQuery() не вставляет запись, а также не генерирует исключение?

Я не использую хранимые процедуры. Я не использую транзакцию. Я регистрирую все исключения, выдаваемые ExecuteNonQuery(), но, по-видимому, никаких исключений не выдается... Я также не проверяю возвращаемое значение ExecuteNonQuery(). Но возможно ли, что ExecuteNonQuery возвращает значение, отличное от 1, если вставка прошла успешно?

02.12.2009

  • Это делается внутри транзакции из кода? Возможно, транзакция не была зафиксирована. 02.12.2009
  • Причина, почему они не вставлены, была бы интересна... кроме того, возможно, вы могли бы опубликовать заявление о вставке. 02.12.2009
  • Несколько лет спустя, но у меня та же проблема с компонентами Oracle.DataAccess версии 4.0. ExecuteNonQuery не генерирует исключение при возникновении ошибки И останавливает выполнение любого кода после этой строки. 20.04.2012

Ответы:


1

Это не должно. ExecuteNonQuery возвращает целое число, указывающее количество затронутых строк. Если строки не были вставлены, должен быть возвращен 0. Он должен генерировать исключение, когда ему не удается выполнить запрос. Например: соединение закрыто, таблица не существует и т. д.

02.12.2009
  • Есть ли какая-либо документация, в которой говорится, что проверки исключения достаточно, чтобы узнать об ошибке для операций (INSERT, UPDATE, DELETE)? Могу ли я просто игнорировать возвращаемое значение и просто зависеть от оператора catch. Кроме того, в документации MSDN указано, что исключение не выдается в .NET 1.1, но не указано, что впоследствии исключение обязательно будет выброшено в .NET 2.0. 26.02.2010

  • 2

    Нет, если вы где-то не проглатываете исключение, например:

    try
    {
       DoSomethingOnTheDbThatMightThrowAnException();
    }
    catch(Exception ex)
    {
       // Do nothing, thus swallowing the exception
    }
    

    Также проверьте возвращаемое значение ExecuteNonQuery(). Если он равен 0, возможно, вы захотите создать исключение самостоятельно.

    02.12.2009

    3

    Это маловероятно.

    У вас есть обработчик ошибок на более высоком уровне, который может перехватывать ошибку и отбрасывать ее?

    02.12.2009

    4

    "Все работает нормально, но иногда записи не вставляются." Возможно, вставка в/через представление, которое позволит вам вставлять записи, которые вы на самом деле не видите. Виртуальная частная база данных/безопасность на уровне строк также может это сделать.

    02.12.2009

    5

    Просто для записи у меня была эта проблема.

    Это произошло потому, что я проверял значение null или DBNull.Value из gridviewcell в строке при построении параметров команды для хранимого процесса из ячеек.

    Что-то вроде этого:

    if(cell.Value != DBNull.Value && cell.Value != null)  
    {    
        //add the parameter to the Command object  
    }
    

    Это означало, что он создавал параметр, когда я получал пустую строку, а Convert.ToDecimal в то время не вызывал исключение NumberFormatException.

    Вместо этого было выброшено исключение NumberFormatException, когда я попытался выполнить cmd.ExecuteNonQuery().

    Я предполагаю, что существует преобразование, которое происходит во время выполнения, когда запускается ExecuteNonQuery().

    Я исправил это, переключившись на:

    if(cell.Value != DBNull.Value &&
    !string.IsNullOrEmpty(cell.Value.ToString()))
    {
       //Create and Add the parameter
    }
    
    06.05.2012

    6

    Возможно, ExecuteNonQuery() выдает исключение, которое не перехвачено вашим блоком try-catch. Проверьте журнал событий Windows, чтобы быть уверенным; исключение AccessViolationException может возникнуть из-за сбоя одного из ваших драйверов, и такое исключение обычно не перехватывается в управляемом коде, начиная с .NET 4.0. Решение описано по этой ссылке.

    09.12.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..