| Предыдущий | Следующий |
| DB_E_RESOURCEEXISTS | DB_E_OUTOFSPACE |
DB_E_DUPLICATECONSTRAINTID
Что означает DB_E_DUPLICATECONSTRAINTID
DB_E_DUPLICATECONSTRAINTID (0x80040E99) — Ограничение уже существует.
Контекст результата 0x80040E99 — подсистема «OLE DB» и область «объекты команд, rowset, accessors, свойства и привязки поставщика». Условие «ограничение уже существует» указывает на тему «дубликат, ограничение, идентификатор», а не на общий отказ всего компонента.
Что проверить и как подтвердить исправление
Не начинайте с общего сброса компонента: сопоставьте первый отказ с фактическими параметрами операции. При 0x80040E99 и условии «ограничение уже существует» установите идентичность и владельца уже существующего объекта; не создавайте второй экземпляр, пока не проверен жизненный цикл первого.
Диагностика 0x80040E99 должна включать интерфейс и метод OLE DB, CLSID и версию поставщика, состояние command/rowset, предоставленные свойства и все записи объекта ошибок OLE DB; отдельно запишите ID, HRESULT, DBID, DBCONSTRAINTDESC, CLSID. Для темы «дубликат, ограничение, идентификатор» при 0x80040E99 важны значения именно на первом отказе, а не после обработки ошибки верхним уровнем.
Для 0x80040E99 применяйте исправление на границе первого отказа: исправляйте состояние конкретного объекта, маску флагов, описание привязок или поддерживаемое поставщиком свойство; не сводите результат к общей «ошибке базы данных». Сообщение «ограничение уже существует» при 0x80040E99 не следует подавлять общей обработкой исключения.
Повторите операцию в том же окружении и сравните первый отличающийся вызов; для результата 0x80040E99 это надёжнее единичного успеха на других данных.
Документация для результата 0x80040E99: OLE DB data definition language · ITableDefinitionWithConstraints · IAlterTable::AlterTable.
Нужно найти другой код? Найти другой код состояния или ошибки.