Parámetros y metadatos de conjuntos de filas
En este tema se proporciona información acerca de los siguientes tipos y miembros de tipo relacionados con las mejoras de fecha y hora de OLE DB.
Estructura DBBINDING
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
La siguiente información se devuelve en la estructura DBPARAMINFO a través de prgParamInfo:
Tipo de parámetro |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Desactivado |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Establecido |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Desactivado |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Desactivado |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19,21..27 |
0..7 |
Establecido |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26,28..34 |
0..7 |
Establecido |
Observe que en algunos casos los intervalos de valores no son continuos. Esto se debe a la adición de un separador decimal cuando la precisión fraccionaria es mayor que cero.
DBPARAMFLAGS_SS_ISVARIABLESCALE es únicamente válido cuando se conecta a un servidor SQL Server 2008 o posterior. DBPARAMFLAGS_SS_ISVARIABLESCALE no se establece nunca cuando se conecta a servidores de nivel inferior.
ICommandWithParameters::SetParameterInfo y tipos de parámetro implícitos
La información que se proporciona en la estructura de DBPARAMBINDINFO debe cumplir lo siguiente:
pwszDataSourceType (depende del proveedor) |
pwszDataSourceType (OLE DB genérico) |
ulParamSize |
bScale |
---|---|---|---|
|
DBTYPE_DATE |
6 |
No se tiene en cuenta |
date |
DBTYPE_DBDATE |
6 |
Omitido |
|
DBTYPE_DBTIME |
10 |
No se tiene en cuenta |
time |
DBTYPE_DBTIME2 |
10 |
0..7 |
smalldatetime |
|
16 |
No se tiene en cuenta |
datetime |
|
16 |
No se tiene en cuenta |
datetime2 o DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
16 |
0..7 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
0..7 |
El parámetro bPrecision no se tiene en cuenta.
No se tiene en cuenta "DBPARAMFLAGS_SS_ISVARIABLESCALE" al enviar los datos al servidor. Las aplicaciones pueden exigir el uso de tipos heredados de flujo de datos tabular (TDS) mediante los nombres de tipo específico del proveedor "datetime" y "smalldatetime". Cuando se conecta a los servidores SQL Server 2008 (o posterior), se usará el formato "datetime2" y, si es necesario, se producirá una conversión implícita de servidor cuando el nombre de tipo es "datetime2" o "DBTYPE_DBTIMESTAMP". bScale se pasa por alto si se usan los nombres de tipo específico del proveedor "datetime" o "smalldatetime". De lo contrario, las aplicaciones deben asegurarse de que bScale se ha establecido correctamente. Las aplicaciones actualizadas de MDAC y SQL Server Native Client de SQL Server 2005 que usan "DBTYPE_DBTIMESTAMP" generarán un error si no establecen bScale correctamente. Cuando esté conectado a las instancias de servidor anteriores a SQL Server 2008, un valor bScale que no sea 0 ó 3 con "DBTYPE_DBTIMESTAMP" es un error y se devolverá E_FAIL.
Cuando no se llama a ICommandWithParameters::SetParameterInfo, el proveedor implica al tipo de servidor a partir del tipo de enlace como se especifica en IAccessor::CreateAccessor de la manera siguiente:
Tipo de enlace |
pwszDataSourceType (depende del proveedor) |
---|---|
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 devuelve las columnas siguientes:
Tipo de columna |
DBCOLUMN_TYPE |
DBCOLUM_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION |
DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Desactivado |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Establecido |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Desactivado |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Desactivado |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Establecido |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Establecido |
DBCOLUMN_FLAGS, DBCOLUMNFLAGS_ISFIXEDLENGTH es siempre TRUE para los tipos de fecha y hora, y las marcas siguientes son siempre FALSE:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
Se pueden establecer las marcas restantes (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE y DBCOLUMNFLAGS_WRITEUNKNOWN), dependiendo de cómo se defina la columna y la consulta real.
Se proporciona una nueva marca DBCOLUMNFLAGS_SS_ISVARIABLESCALE en DBCOLUMN_FLAGS para permitir que una aplicación determine el tipo de servidor de columnas, donde DBCOLUMN_TYPE es DBTYPE_DBTIMESTAMP. DBCOLUMN_SCALE o DBCOLUMN_DATETIMEPRECISION también se debe usar para identificar el tipo de servidor.
DBCOLUMNFLAGS_SS_ISVARIABLESCALE es únicamente válido cuando se conecta a un servidor SQL Server 2008 o posterior. DBCOLUMNFLAGS_SS_ISVARIABLESCALE no está definido cuando se conecta a servidores de nivel inferior.
IColumnsInfo::GetColumnInfo
La estructura DBCOLUMNINFO devuelve la información siguiente:
Tipo de parámetro |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Desactivado |
time(1..7) |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Establecido |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Desactivado |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Desactivado |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Establecido |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Establecido |
En dwFlags DBCOLUMNFLAGS_ISFIXEDLENGTH es siempre TRUE para los tipos de fecha y hora, y las marcas siguientes son siempre FALSE:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER, MAYDEFER
Se pueden establecer las marcas restantes (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE y DBCOLUMNFLAGS_WRITEUNKNOWN).
Se proporciona una nueva marca DBCOLUMNFLAGS_SS_ISVARIABLESCALE en dwFlags para permitir que una aplicación determine el tipo de servidor de columnas, donde wType es DBTYPE_DBTIMESTAMP. bScale también se deben usar para identificar el tipo de servidor.