Я использовал ON DUPLICATE KEY UPDATE
много. Для некоторых ситуаций это нестандартное расширение SQL, которое действительно стоит использовать.
Во-первых, вам нужно убедиться, что у вас есть уникальное ограничение ключа на месте. Функция ON DUPLICATE KEY UPDATE
срабатывает только в том случае, если бы было уникальное нарушение ключа.
Вот широко используемый формат:
$query = "INSERT INTO $table (column1, column2, column3)
VALUES ('value-1', 'value-2', 'value-3')
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);"
column1 = values(column1)
означает «Обновить столбец1 со значением, которое было бы вставлено, если запрос не попал в нарушение дублирующего ключа. " Другими словами, это просто означает, что столбец обновления1 будет иметь то, что было бы с обработкой вставки.
. Посмотрев на этот код, кажется неправильным, что вы обновляете все три столбца, которые вы 'пытается вставить. Какой из столбцов имеет уникальное ограничение?
EDIT: Изменить на основе формата «SET» инструкции вставки mysql для вопроса из OP.
В основном для использования ON DUPLICATE KEY UPDATE
вы просто пишете инструкцию insert, как обычно , но добавьте предложение ON DUPLICATE KEY UPDATE
, прикрепленное к концу. Я считаю, что он должен работать следующим образом:
INSERT INTO $table
set column1 = 'value-1',
column2 = 'value-2',
column3 = 'value-3'
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);
Опять же, один из столбцов, которые вы вставляете, должен иметь уникальный индекс (или комбинацию столбцов). Это может быть связано с тем, что один из них является первичным ключом или потому, что в таблице есть уникальный индекс.
Я был в состоянии отладить некоторые проблемы разработчика управления путем выполнения второго экземпляра VS, затем из первого VS, экземпляр делает "Отладку-> Присоединение к Процессу" и выбирает "devenv".
первый экземпляр VS - то, где Вы установите свои точки останова. Используйте второй экземпляр для загрузки разработчика, чтобы заставить код "разработчика" работать.
Я имел, это много раз происходит, и это - реальная боль.
Во-первых я предложил бы пытаться следовать за отслеживанием стека, обеспеченным разработчиком, хотя я нашел, что часто просто перечисляет набор материала внутренностей, который не полезен.
, Если это не работает тогда компиляция попытки и определение исключения оттуда. Вы действительно летите слепой, который является проблемой. Вы могли тогда попытаться просто выполнить код и видеть, какое исключение повышено при выполнении его который должен дать Вам еще некоторую информацию.
А подход в последнюю минуту мог быть должен удалить весь несгенерированный код из формы и постепенно повторно представлять его для определения ошибки.
при использовании пользовательских элементов управления Вы могли бы вручную удалить сгенерированный код, связанный с пользовательскими элементами управления также, если предыдущий метод все еще приводит к ошибке. Вы могли тогда повторно представить это постепенное таким же образом для определения, какой пользовательский элемент управления вызывает проблему, затем пойдите и отладьте это отдельно.
В основном, насколько я могу сказать, нет никакого реального пути вокруг проблемы кроме сильно ударить его немного!
Каждый отличается, и они могут иногда быть неясными. Как первый шаг, я сделал бы следующее:
Можно запустить второй экземпляр VS и присоединить его к первому экземпляру VS (Ctrl+Alt+P). В первом экземпляре задайте точки останова, во втором запустите конструктор, и точка останова срабатывает. Вы можете выполнить пошаговое выполнение кода, но функция "Изменить и продолжить" не будет работать.
Чтобы параметр "Изменить и продолжить" работал, задайте параметры отладки библиотеки управления для запуска VS с аргументом командной строки, являясь именем файла решения. Затем вы можете просто установить точки останова и нажать F5. Он будет отлаживаться так же, как пользовательский код! В качестве примечания, вы можете сделать это также надстройки VS и Office.