--- title: "Parameter and Rowset Metadata | Microsoft Docs" ms.custom: "" ms.date: "03/06/2017" ms.prod: "sql-server-2014" ms.reviewer: "" ms.technology: ms.topic: "reference" helpviewer_keywords: - "metadata [OLE DB]" ms.assetid: 31b318a4-20e7-4db0-b367-eb9938859029 author: MightyPen ms.author: genemi manager: craigg --- # Parameter and Rowset Metadata This topic provides information about the following type and type members, related to the OLE DB date and time enhancements. - DBBINDING structure - `ICommandWithParameters::GetParameterInfo` - `ICommandWithParameters::SetParameterInfo` - `IColumnsRowset::GetColumnsRowset` - `IColumnsInfo::GetColumnInfo` ## ICommandWithParameters::GetParameterInfo The following information is returned in the DBPARAMINFO structure through *prgParamInfo*: |Parameter Type|*wType*|*ulParamSize*|*bPrecision*|*bScale*|*dwFlags*

DBPARAMFLAGS_SS_ISVARIABLESCALE| |--------------------|-------------|-------------------|------------------|--------------|-----------------------------------------------------| |date|DBTYPE_DBDATE|6|10|0|Clear| |time|DBTYPE_DBTIME2|10|8, 10..16|0..7|Set| |smalldatetime|DBTYPE_DBTIMESTAMP|16|16|0|Clear| |datetime|DBTYPE_DBTIMESTAMP|16|23|3|Clear| |datetime2|DBTYPE_DBTIMESTAMP|16|19,21..27|0..7|Set| |datetimeoffset|DBTYPE_DBTIMESTAMPOFFSET|20|26,28..34|0..7|Set| Notice that in some cases value ranges are not continuous. This is due to the addition of a decimal point when fractional precision is greater than zero. DBPARAMFLAGS_SS_ISVARIABLESCALE is only valid when connected to a [!INCLUDE[ssKatmai](../../includes/sskatmai-md.md)] (or later) server. DBPARAMFLAGS_SS_ISVARIABLESCALE is never set when connected to down-level servers. ## ICommandWithParameters::SetParameterInfo and Implied Parameter Types The information provided in the DBPARAMBINDINFO structure must conform to the following: |*pwszDataSourceType*

(provider specific)|*pwszDataSourceType*

(OLE DB generic)|*ulParamSize*|*bScale*| |----------------------------------------------------|-------------------------------------------------|-------------------|--------------| ||DBTYPE_DATE|6|Ignored| |date|DBTYPE_DBDATE|6|Ignored| ||DBTYPE_DBTIME|10|Ignored| |time|DBTYPE_DBTIME2|10|0..7| |smalldatetime||16|Ignored| |datetime||16|Ignored| |datetime2 or DBTYPE_DBTIMESTAMP|DBTYPE_DBTIMESTAMP|16|0..7| |datetimeoffset|DBTYPE_DBTIMESTAMPOFFSET|20|0..7| The *bPrecision* parameter is ignored. "DBPARAMFLAGS_SS_ISVARIABLESCALE" is ignored when sending data to the server. Applications can force the use of legacy tabular-data stream (TDS) types by using the provider-specific type names "`datetime`" and "`smalldatetime`". When connected to [!INCLUDE[ssKatmai](../../includes/sskatmai-md.md)] (or later) servers, "`datetime2`" format will be used and an implicit server conversion will occur, if necessary, when the type name is "`datetime2`" or "DBTYPE_DBTIMESTAMP". *bScale* is ignored if the provider specific type names "`datetime`" or "`smalldatetime`" are used. Otherwise, appications must ensure that *bScale* is set correctly. Applications upgraded from MDAC and [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] Native Client from [!INCLUDE[ssVersion2005](../../includes/ssversion2005-md.md)] that use "DBTYPE_DBTIMESTAMP" will fail if they do not set *bScale* correctly. When connected to server instances earlier than [!INCLUDE[ssKatmai](../../includes/sskatmai-md.md)], a *bScale* value other than 0 or 3 with "DBTYPE_DBTIMESTAMP" is an error and E_FAIL will be returned. When ICommandWithParameters::SetParameterInfo is not called, the provider imples the server type from the binding type as specified in IAccessor::CreateAccessor as follows: |Binding Type|*pwszDataSourceType*

(provider specific)| |------------------|----------------------------------------------------| |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` returns the following columns: |Column Type|DBCOLUMN_TYPE|DBCOLUM_COLUMNSIZE|DBCOLUMN_PRECISION|DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION|DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE| |-----------------|--------------------|-------------------------|-------------------------|--------------------------------------------------|---------------------------------------------------------| |date|DBTYPE_DBDATE|6|10|0|Clear| |time|DBTYPE_DBTIME2|10|8, 10..16|0..7|Set| |smalldatetime|DBTYPE_DBTIMESTAMP|16|16|0|Clear| |datetime|DBTYPE_DBTIMESTAMP|16|23|3|Clear| |datetime2|DBTYPE_DBTIMESTAMP|16|19, 21..27|0..7|Set| |datetimeoffset|DBTYPE_DBTIMESTAMPOFFSET|20|26, 28..34|0..7|Set| In DBCOLUMN_FLAGS, DBCOLUMNFLAGS_ISFIXEDLENGTH is always true for date/time types and the following flags are always false: - DBCOLUMNFLAGS_CACHEDEFERRED - DBCOLUMNFLAGS_ISBOOKMARK - DBCOLUMNFLAGS_ISCHAPTER - DBCOLUMNFLAGS_ISLONG - DBCOLUMNFLAGS_ISROWID - DBCOLUMNFLAGS_ISROWVER - DBCOLUMNFLAGS_MAYDEFER The remaining flags (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE, and DBCOLUMNFLAGS_WRITEUNKNOWN) can be set, depending on how the column is defined and the actual query. A new flag DBCOLUMNFLAGS_SS_ISVARIABLESCALE is provided in DBCOLUMN_FLAGS to allow an application to determine the server type of columns, where DBCOLUMN_TYPE is DBTYPE_DBTIMESTAMP. DBCOLUMN_SCALE or DBCOLUMN_DATETIMEPRECISION must also be used to identify the server type. DBCOLUMNFLAGS_SS_ISVARIABLESCALE is only valid when connected to a [!INCLUDE[ssKatmai](../../includes/sskatmai-md.md)] (or later) server. DBCOLUMNFLAGS_SS_ISVARIABLESCALE is undefined when connected to down-level servers. ## IColumnsInfo::GetColumnInfo DBCOLUMNINFO structure returns the following information: |Parameter Type|*wType*|*ulColumnSize*|*bPrecision*|*bScale*|*dwFlags*

DBPARAMFLAGS_SS_ISVARIABLESCALE| |--------------------|-------------|--------------------|------------------|--------------|-----------------------------------------------------| |date|DBTYPE_DBDATE|6|10|0|Clear| |time(1..7)|DBTYPE_DBTIME2|10|8, 10..16|0..7|Set| |smalldatetime|DBTYPE_DBTIMESTAMP|16|16|0|Clear| |datetime|DBTYPE_DBTIMESTAMP|16|23|3|Clear| |datetime2|DBTYPE_DBTIMESTAMP|16|19, 21..27|0..7|Set| |datetimeoffset|DBTYPE_DBTIMESTAMPOFFSET|20|26, 28..34|0..7|Set| In *dwFlags*, DBCOLUMNFLAGS_ISFIXEDLENGTH is always true for date/time types and the following flags are always false: - DBCOLUMNFLAGS_CACHEDEFERRED - DBCOLUMNFLAGS_ISBOOKMARK - DBCOLUMNFLAGS_ISCHAPTER - DBCOLUMNFLAGS_ISLONG - DBCOLUMNFLAGS_ISROWID - DBCOLUMNFLAGS_ISROWVER, MAYDEFER The remaining flags (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE, and DBCOLUMNFLAGS_WRITEUNKNOWN) can be set. A new flag DBCOLUMNFLAGS_SS_ISVARIABLESCALE is provided in *dwFlags* to allow an application to determine the server type of columns, where *wType* is DBTYPE_DBTIMESTAMP. *bScale* must also be used to identify the server type. ## See Also [Metadata (OLE DB)](../../database-engine/dev-guide/metadata-ole-db.md)