Поделиться через


Метаданные параметров и наборов строк

В этом разделе приведены сведения о следующем типе и элементах типа, связанных с усовершенствованиями даты и времени 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.

См. также

Основные понятия

Метаданные (OLE DB)