Parâmetro e metadados de conjunto de linhas
Este tópico fornece informações sobre o tipo e os membros de tipo a seguir, relacionados aos aprimoramentos de data e hora de OLE DB.
Estrutura DBBINDING
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
As seguintes informações são retornadas na estrutura DBPARAMINFO por meio do prgParamInfo:
Tipo de parâmetro |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Limpar |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Definir |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Limpar |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Limpar |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19,21..27 |
0..7 |
Definir |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26,28..34 |
0..7 |
Definir |
Observe que em alguns casos os intervalos de valores não são contínuos. Isso se deve à adição de um ponto decimal quando a precisão fracionária é maior que zero.
DBPARAMFLAGS_SS_ISVARIABLESCALE só é válido quando conectado a um servidor SQL Server 2008 ou posterior. DBPARAMFLAGS_SS_ISVARIABLESCALE nunca é definido quando conectado a servidores de nível inferior.
ICommandWithParameters::SetParameterInfo e tipos de parâmetro implícitos
As informações fornecidas na estrutura DBPARAMBINDINFO devem estar de acordo com o seguinte:
pwszDataSourceType (específico do provedor) |
pwszDataSourceType (OLE DB genérico) |
ulParamSize |
bScale |
---|---|---|---|
|
DBTYPE_DATE |
6 |
Ignorado |
date |
DBTYPE_DBDATE |
6 |
Ignorado |
|
DBTYPE_DBTIME |
10 |
Ignorado |
time |
DBTYPE_DBTIME2 |
10 |
0..7 |
smalldatetime |
|
16 |
Ignorado |
datetime |
|
16 |
Ignorado |
datetime2 ou DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
16 |
0..7 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
0..7 |
O parâmetro bPrecision é ignorado.
"DBPARAMFLAGS_SS_ISVARIABLESCALE" é ignorado ao enviar dados ao servidor. Os aplicativos podem forçar o uso de tipos TDS (tabular-data stream) herdados usando nomes de tipo específicos do provedor "datetime" e "smalldatetime". Quando conectado a servidores SQL Server 2008 (ou posterior), o formato "datetime2" será usado e uma conversão de servidor implícita ocorrerá, se necessário, quando o nome do tipo for "datetime2" ou "DBTYPE_DBTIMESTAMP". bScale será ignorado se os nomes de tipo específicos do provedor "datetime" ou "smalldatetime" forem usados. Caso contrário, os aplicativos devem garantir que bScale esteja definido corretamente. Os aplicativos foram atualizados do MDAC e SQL Server Native Client do SQL Server 2005 que usa "DBTYPE_DBTIMESTAMP" apresentará falha se eles não definirem bScale corretamente. Quando conectado a instâncias do servidor anteriores ao SQL Server 2008, um valor bScale diferente de 0 ou 3 com "DBTYPE_DBTIMESTAMP" é considerado erro e E_FAIL será retornado.
Quando ICommandWithParameters::SetParameterInfo não é chamado, o provedor deduz o tipo de servidor pelo tipo de associação, conforme especificado em IAccessor::CreateAccessor da seguinte maneira:
Tipo de associação |
pwszDataSourceType (específico do provedor) |
---|---|
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 retorna as seguintes colunas:
Tipo de coluna |
DBCOLUMN_TYPE |
DBCOLUM_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION |
DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Limpar |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Definir |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Limpar |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Limpar |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Definir |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Set |
Em DBCOLUMN_FLAGS, DBCOLUMNFLAGS_ISFIXEDLENGTH é sempre true para os tipos de data/hora e os seguintes sinalizadores são sempre false:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
Os sinalizadores restantes (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE e DBCOLUMNFLAGS_WRITEUNKNOWN) podem ser definidos, dependendo de como a coluna é definida e da consulta propriamente dita.
Um novo sinalizador DBCOLUMNFLAGS_SS_ISVARIABLESCALE é fornecido em DBCOLUMN_FLAGS para permitir que um aplicativo determine o tipo de servidor de colunas, onde DBCOLUMN_TYPE é DBTYPE_DBTIMESTAMP. DBCOLUMN_SCALE ou DBCOLUMN_DATETIMEPRECISION também deve ser usado para identificar o tipo de servidor.
DBCOLUMNFLAGS_SS_ISVARIABLESCALE só é válido quando conectado a um servidor SQL Server 2008 ou posterior. DBCOLUMNFLAGS_SS_ISVARIABLESCALE é indefinido quando conectado a servidores de nível inferior.
IColumnsInfo::GetColumnInfo
A estrutura DBCOLUMNINFO retorna as seguintes informações:
Tipo de parâmetro |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Limpar |
time(1..7) |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Definir |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Limpar |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Limpar |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Definir |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Definir |
Em dwFlags, DBCOLUMNFLAGS_ISFIXEDLENGTH é sempre true para os tipos de data/hora e os seguintes sinalizadores são sempre false:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER, MAYDEFER
Os sinalizadores restantes (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE e DBCOLUMNFLAGS_WRITEUNKNOWN) podem ser definidos.
Um novo sinalizador, DBCOLUMNFLAGS_SS_ISVARIABLESCALE, é fornecido em dwFlagspara permitir que um aplicativo determine o tipo de servidor de colunas, onde wType é DBTYPE_DBTIMESTAMP. bScale também deve ser usado para identificar o tipo de servidor.