Compartilhar via


Conversões executadas de servidor para cliente

Este tópico descreve conversões de data/hora executadas entre o SQL Server 2008 (ou posterior) e um aplicativo cliente escrito com o SQL Server Native Client OLE DB.

Conversões

A tabela a seguir descreve as conversões entre o tipo retornado ao cliente e o tipo na associação. Para parâmetros de saída, se ICommandWithParameters::SetParameterInfo tiver sido chamado e o tipo especificado em pwszDataSourceType não corresponder ao tipo real no servidor, uma conversão implícita será executada pelo servidor e o tipo retornado ao cliente corresponderá ao tipo especificado por meio de ICommandWithParameters::SetParameterInfo. Isso pode levar a resultados de conversão inesperados quando as regras de conversão do servidor são diferentes daquelas descritas neste tópico. Por exemplo, quando uma data padrão deve ser fornecida, o SQL Server usa 1900-1-1 em vez de 1899-12-30.

Para->

De
DATA DBDATE DBTIME DBTIME2 DBTIMESTAMP DBTIMESTAMPOFFSET FILETIME BYTES VARIANTE SSVARIANT BSTR STR WSTR
Data (calendário) 1,7 OKEY - - 1 1,3 1,7 - OK (VT_BSTR) OKEY OKEY 4 4
Hora 5,6,7 - 9 OKEY 6 3,6 5,6 - OK (VT_BSTR) OKEY OKEY 4 4
Smalldatetime 7 oito 9,10 10 OKEY 3 7 - 7 (VT_DATE) OKEY OKEY 4 4
Data e hora 5,7 oito 9,10 10 OKEY 3 7 - 7 (VT_DATE) OKEY OKEY 4 4
Datetime2 5,7 oito 9,10 10 7 3 5,7 - OK (VT_BSTR) OKEY OKEY 4 4
Datetimeoffset 5,7,11 8,11 9,10,11 10,11 7,11 OKEY 5,7,11 - OK (VT_BSTR) OKEY OKEY 4 4
Char, Varchar,

Nchar
7, 13 12 12,9 12 12 12 7,13 Não aplicável Não aplicável Não aplicável Não aplicável Não aplicável Não aplicável
Sql_variant

(datetime)
7 oito 9,10 10 OKEY 3 7 - 7(VT_DATE) OKEY OKEY 4 4
Sql_variant

(smalldatetime)
7 oito 9,10 10 OKEY 3 7 - 7(VT_DATE) OKEY OKEY 4 4
Sql_variant

(data)
1,7 OKEY 2 2 1 1,3 1,7 - OK(VT_BSTR) OKEY OKEY 4 4
Sql_variant

(hora)
5,6,7 2 6 OKEY 6 3,6 5,6 - OK(VT_BSTR) OKEY OKEY 4 4
Sql_variant

(datetime2)
5,7 oito 9,10 10 OKEY 3 5,7 - OK(VT_BSTR) OKEY OKEY 4 4
Sql_variant

(datetimeoffset)
5,7,11 8,11 9,10,11 10,11 7,11 OKEY 5,7,11 - OK(VT_BSTR) OKEY OKEY 4 4

Legenda dos símbolos

Símbolo Significado
OKEY Nenhuma conversão é necessária.
- Não há suporte a nenhuma conversão. Se a associação for validada quando IAccessor::CreateAccessor for chamado, DBBINDSTATUS_UPSUPPORTEDCONVERSION será retornado em rgStatus. Quando a validação do acessador é adiada, DBSTATUS_E_BADACCESSOR é definido.
1 Os campos de tempo são definidos como zero.
2 DBSTATUS_E_CANTCONVERTVALUE está definido.
3 O fuso horário está definido como zero.
4 Se o buffer do cliente não for grande o suficiente, DBSTATUS_S_TRUNCATED será definido. Quando o tipo de servidor inclui segundos fracionários, o número de dígitos na cadeia de caracteres de resultado corresponde exatamente à escala do tipo de servidor.
5 O truncamento de segundos ou segundos fracionários é ignorado.
6 A data é definida como a data atual, a menos que a origem seja um literal de hora de cadeia de caracteres e o destino seja DBTYPE_DATE. Nesse caso, 1899-12-30 é usado.
7 Se o valor estourar, DBSTATUS_E_DATAOVERFLOW será definido.
oito Os campos de tempo são ignorados.
9 Os campos de segundos fracionários são ignorados.
10 O componente de data é ignorado.
11 A hora é convertida no fuso horário do cliente. Se ocorrer um erro durante essa conversão, DBSTATUS_E_DATAOVERFLOW será definido.
12 A cadeia de caracteres é analisada como um literal ISO e convertida no tipo de destino. Se isso falhar, a cadeia de caracteres será analisada como um literal de data OLE (que também tem componentes de hora) e convertida de uma data OLE (DBTYPE_DATE) para o tipo de destino. A cadeia de caracteres deve estar em conformidade com a sintaxe de literais do tipo de destino permitido para que a análise de formato ISO seja bem-sucedida. Para que a análise OLE seja bem-sucedida, a cadeia de caracteres deve estar em conformidade com a sintaxe reconhecida pelo OLE. Se a cadeia de caracteres não puder ser analisada, DBSTATUS_E_CANTCONVERTVALUE será definida. Se algum valor de componente estiver fora do intervalo, DBSTATUS_E_DATAOVERFLOW será definido.
13 A cadeia de caracteres é analisada como um literal ISO e convertida no tipo de destino. Se isso falhar, a cadeia de caracteres será analisada como um literal de data OLE (que também tem componentes de hora) e convertida de uma data OLE (DBTYPE_DATE) para o tipo de destino. A cadeia de caracteres deve estar em conformidade com a sintaxe para literais datetime, a menos que o destino seja DBTYPE_DATE ou DBTYPE_DBTIMESTAMP. Se esse for o caso, um literal de data ou hora será permitido para que a análise de formato ISO seja bem-sucedida. Para que a análise OLE seja bem-sucedida, a cadeia de caracteres deve estar em conformidade com a sintaxe reconhecida pelo OLE. Se a cadeia de caracteres não puder ser analisada, DBSTATUS_E_CANTCONVERTVALUE será definida. Se algum valor de componente estiver fora do intervalo, DBSTATUS_E_DATAOVERFLOW será definido.

Consulte Também

Associações e conversões (OLE DB)