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 — пока полный косяк.

Leave a Comment