Compartilhar via


Metadados – parâmetro e conjunto de linhas

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Baixar o driver do OLE DB

Este artigo fornece informações sobre o tipo e os membros de tipo a seguir, relacionados às melhorias de data e hora do 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 de prgParamInfo:

Tipo de parâmetro wType ulParamSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Liberada
time DBTYPE_DBTIME2 10 8, 10..16 0..7 Definir
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Liberada
DATETIME DBTYPE_DBTIMESTAMP 16 23 3 Liberada
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 que executa o SQL Server 2008 (10.0.x) e versões posteriores. 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 Ignored
date DBTYPE_DBDATE 6 Ignored
DBTYPE_DBTIME 10 Ignored
time DBTYPE_DBTIME2 10 0..7
smalldatetime 16 Ignored
DATETIME 16 Ignored
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 do protocolo TDS herdados usando os nomes de tipo específicos do provedor "datetime" e "smalldatetime". Quando você estiver conectado a servidores que executam o SQL Server 2008 (10.0.x) e versões posteriores, 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 "datetime" ou "smalldatetime" específicos do provedor forem usados. Caso contrário, os aplicativos precisam garantir que bScale esteja definido corretamente. Aplicativos atualizados do MDAC e do Driver do OLE DB para SQL Server do SQL Server 2005 (9.x) que usarem "DBTYPE_DBTIMESTAMP" falharão se eles não definirem bScale corretamente. Quando você estiver conectado a instâncias do servidor anteriores ao SQL Server 2008 (10.0.x), um valor bScale diferente de 0 ou 3 com "DBTYPE_DBTIMESTAMP" será considerado um erro e E_FAIL será retornado.

Quando ICommandWithParameters::SetParameterInfo não for chamado, o provedor presume o tipo do servidor com base no tipo de associação, conforme definido em IAccessor::CreateAccessor e demonstrado no seguinte exemplo:

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 Liberada
time DBTYPE_DBTIME2 10 8, 10..16 0..7 Definir
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Liberada
DATETIME DBTYPE_DBTIMESTAMP 16 23 3 Liberada
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Definir
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Definir

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 que executa o SQL Server 2008 (10.0.x) e versões posteriores. 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 Liberada
time(1..7) DBTYPE_DBTIME2 10 8, 10..16 0..7 Definir
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Liberada
DATETIME DBTYPE_DBTIMESTAMP 16 23 3 Liberada
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 tem o valor verdadeiro para os tipos de data/hora e os seguintes sinalizadores sempre têm o valor falso:

  • 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 dwFlags para permitir que um aplicativo determine o tipo de servidor de colunas, em que wType é DBTYPE_DBTIMESTAMP. bScale também precisa ser usado para identificar o tipo de servidor.

Consulte Também

Suporte a tipos de dados para melhorias de data e hora do OLE DB