DBTYPE_EMPTY и DBTYPE_NULL
Привет всем.
Через 18 лет (радует что не 20) сформировалось полное понимание назначения типов данных DBTYPE_EMPTY и DBTYPE_NULL.
DBTYPE_EMPTY обозначает отсутствие значения как такового. Указание данных с типом DBTYPE_EMPTY — это сигнал использовать значения по умолчанию. Это же самое что указать статус данных DBSTATUS_S_DEFAULT.
DBTYPE_NULL обозначает NULL-состояние данных. Это же самое что указать статус данных DBSTATUS_S_ISNULL.
Зачем нужно дублирование DBTYPE_EMPTY/DBTYPE_NULL и DBSTATUS_S_DEFAULT/DBSTATUS_S_ISNULL?
Типы используются в языках вроде VB/C# с доступом к провайдеру через ADODB/ADO.NET. Там есть предопределенные значения empty/null (VB) и null/DBNull.Value (C#). Просто присваиваете эти значения и провайдер получит сигнал использовать DEFAULT или NULL значение для параметра/колонки.
А статусы используются при работе с провайдером напрямую — вы подготавливаете многократно используемый «буфер для обмена данных» с указанием «нормальных» типов данных параметров/колонок, а потом, в зависимости от ситуации, выставляете статусы DBSTATUS_S_OK/DBSTATUS_S_ISNULL/DBSTATUS_S_DEFAULT передаваемым значениям.
С парой DBTYPE_NULL/DBSTATUS_S_ISNULL IBProvider нормально работает уже давно.
А вот с DBTYPE_EMPTY/DBSTATUS_S_DEFAULT — пока полный косяк.