Метаданные параметров и наборов строк
В этом разделе приведены сведения о следующем типе и элементах типа, связанных с усовершенствованиями даты и времени OLE DB.
Структура DBBINDING
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
Следующие сведения возвращаются в структуре DBPARAMINFO с помощью prgParamInfo:
Тип параметра |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Сброшен |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Установлен |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Сброшен |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Сброшен |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19,21..27 |
0..7 |
Установлен |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26,28..34 |
0..7 |
Установлен |
Обратите внимание, что в некоторых случаях диапазоны значений не являются непрерывными. Это следствие добавления десятичной запятой, когда точность в долях секунды выше нуля.
Параметр DBPARAMFLAGS_SS_ISVARIABLESCALE допустим только при соединении с сервером SQL Server 2008 (или более поздней версией). DBPARAMFLAGS_SS_ISVARIABLESCALE никогда не задается при соединении с серверами низкого уровня.
Метод ICommandWithParameters::SetParameterInfo и неявные типы параметров
Сведения, предоставленные в структуре DBPARAMBINDINFO, должны соответствовать следующим требованиям.
pwszDataSourceType (зависит от поставщика) |
pwszDataSourceType (OLE DB, обычный) |
ulParamSize |
bScale |
---|---|---|---|
|
DBTYPE_DATE |
6 |
Не учитывается |
date |
DBTYPE_DBDATE |
6 |
Не учитывается |
|
DBTYPE_DBTIME |
10 |
Не учитывается |
time |
DBTYPE_DBTIME2 |
10 |
0..7 |
smalldatetime |
|
16 |
Не учитывается |
datetime |
|
16 |
Не учитывается |
datetime2 или DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
16 |
0..7 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
0..7 |
Параметр bPrecision не учитывается.
Значение «DBPARAMFLAGS_SS_ISVARIABLESCALE» не учитывается при отправке данных на сервер. Приложения могут принудительно использовать унаследованные типы потоков табличных данных за счет применения имен типов «datetime» и «smalldatetime», характерных для поставщика. При соединении с серверами SQL Server 2008 (или более поздней версии) используется формат «datetime2», а также при необходимости происходит неявное преобразование сервера, когда тип имеет имя «datetime2» или «DBTYPE_DBTIMESTAMP». Параметр bScale не учитывается, если используются имена типов «datetime» или «smalldatetime» для данного конкретного поставщика. В противном случае приложения должны убедиться, что параметр bScale задан правильно. Приложения, обновленные с компонентами MDAC и собственного клиента SQL Server из версии SQL Server 2005, которые используют значение «DBTYPE_DBTIMESTAMP», не будут работать, если правильно не зададут параметр bScale. При соединении с экземплярами сервера версии ниже SQL Server 2008 значение параметра bScale, отличное от 0 или 3 с именем «DBTYPE_DBTIMESTAMP», является ошибкой. В этом случае будет возвращено E_FAIL.
Если сущность ICommandWithParameters::SetParameterInfo не вызывается, поставщик определяет тип сервера, исходя из типа привязки, указанного в IAccessor::CreateAccessor, следующим образом.
Тип привязки |
pwszDataSourceType (зависит от поставщика) |
---|---|
DBTYPE_DATE |
datetime2(0) |
DBTYPE_DBDATE |
date |
DBTYPE_DBTIME |
time(0) |
DBTYPE_DBTIME2 |
time(7) |
DBTYPE_DBTIMESTAMP |
datetime2(7) |
DBTYPE_DBTIMESTAMPOFFSET |
datetimeoffset(7) |
Функция IColumnsRowset::GetColumnsRowset
Функция IColumnsRowset::GetColumnsRowset возвращает следующие столбцы.
Тип столбца |
DBCOLUMN_TYPE |
DBCOLUM_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION |
DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Сброшен |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Установлен |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Сброшен |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Сброшен |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Установлен |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Установлен |
В DBCOLUMN_FLAGS, DBCOLUMNFLAGS_ISFIXEDLENGTH всегда имеет значение TRUE для типов даты-времени, а следующие флаги всегда имеют значение FALSE.
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
Остальные флаги (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE и DBCOLUMNFLAGS_WRITEUNKNOWN) можно задать в зависимости от того, как определен столбец, а также от фактического запроса.
В DBCOLUMN_FLAGS новый флаг DBCOLUMNFLAGS_SS_ISVARIABLESCALE внедрен, чтобы приложения могли определять тип сервера столбцов, где DBCOLUMN_TYPE является DBTYPE_DBTIMESTAMP. Также должен использоваться флаг DBCOLUMN_SCALE или DBCOLUMN_DATETIMEPRECISION для указания типа сервера.
Флаг DBCOLUMNFLAGS_SS_ISVARIABLESCALE допустим только при соединении с сервером SQL Server 2008 (или более поздней версией). При соединении с серверами низкого уровня флаг DBCOLUMNFLAGS_SS_ISVARIABLESCALE остается неопределенным.
Функция IColumnsInfo::GetColumnInfo
Структура DBCOLUMNINFO возвращает следующие данные.
Тип параметра |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Сброшен |
time(1..7) |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Установлен |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Сброшен |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Сброшен |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Установлен |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Установлен |
В dwFlags флаг DBCOLUMNFLAGS_ISFIXEDLENGTH всегда имеет значение TRUE для типов даты-времени, а следующие флаги всегда имеют значение FALSE.
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER, MAYDEFER
Остальные флаги (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE и DBCOLUMNFLAGS_WRITEUNKNOWN) можно задавать.
В dwFlags предусмотрен новый флаг DBCOLUMNFLAGS_SS_ISVARIABLESCALE, чтобы приложения могли определять тип сервера столбцов, где wType является DBTYPE_DBTIMESTAMP. Кроме того, для определения типа сервера необходимо использовать bScale.