Conversões executadas do servidor para o 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 OLE DB do SQL Server Native Client.
Conversões
A tabela a seguir descreve conversões entre o tipo retornado para o 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, será executada uma conversão implícita pelo servidor, e o tipo retornado para o cliente corresponderá ao tipo especificado por meio de ICommandWithParameters::SetParameterInfo. Isto poderá levar a resultados de conversão inesperados quando as regras de conversão do servidor forem diferentes daquelas descritas neste tópico. Por exemplo, quando é necessário fornecer uma data padrão, o SQL Server usa 1/1/1900 em vez de 30/12/1899.
Para -> De |
DATE |
DBDATE |
DBTIME |
DBTIME2 |
DBTIMESTAMP |
DBTIMESTAMPOFFSET |
FILETIME |
BYTES |
VARIANT |
SSVARIANT |
BSTR |
STR |
WSTR |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Date |
1,7 |
OK |
- |
- |
1 |
1,3 |
1,7 |
- |
OK (VT_BSTR) |
OK |
OK |
4 |
4 |
Time |
5,6,7 |
- |
9 |
OK |
6 |
3,6 |
5,6 |
- |
OK (VT_BSTR) |
OK |
OK |
4 |
4 |
Smalldatetime |
7 |
8 |
9,10 |
10 |
OK |
3 |
7 |
- |
7 (VT_DATE) |
OK |
OK |
4 |
4 |
Datetime |
5,7 |
8 |
9,10 |
10 |
OK |
3 |
7 |
- |
7 (VT_DATE) |
OK |
OK |
4 |
4 |
Datetime2 |
5,7 |
8 |
9,10 |
10 |
7 |
3 |
5,7 |
- |
OK (VT_BSTR) |
OK |
OK |
4 |
4 |
Datetimeoffset |
5,7,11 |
8,11 |
9,10,11 |
10,11 |
7,11 |
OK |
5,7,11 |
- |
OK (VT_BSTR) |
OK |
OK |
4 |
4 |
Char, Varchar, Nchar, Nvarchar |
7, 13 |
12 |
12,9 |
12 |
12 |
12 |
7,13 |
N/D |
N/D |
N/D |
N/D |
N/D |
N/D |
Sql_variant (datetime) |
7 |
8 |
9,10 |
10 |
OK |
3 |
7 |
- |
7(VT_DATE) |
OK |
OK |
4 |
4 |
Sql_variant (smalldatetime) |
7 |
8 |
9,10 |
10 |
OK |
3 |
7 |
- |
7(VT_DATE) |
OK |
OK |
4 |
4 |
Sql_variant (date) |
1,7 |
OK |
2 |
2 |
1 |
1,3 |
1,7 |
- |
OK(VT_BSTR) |
OK |
OK |
4 |
4 |
Sql_variant (time) |
5,6,7 |
2 |
6 |
OK |
6 |
3,6 |
5,6 |
- |
OK(VT_BSTR) |
OK |
OK |
4 |
4 |
Sql_variant (datetime2) |
5,7 |
8 |
9,10 |
10 |
OK |
3 |
5,7 |
- |
OK(VT_BSTR) |
OK |
OK |
4 |
4 |
Sql_variant (datetimeoffset) |
5,7,11 |
8,11 |
9,10,11 |
10,11 |
7,11 |
OK |
5,7,11 |
- |
OK(VT_BSTR) |
OK |
OK |
4 |
4 |
Legenda dos símbolos
Símbolo |
Significado |
---|---|
OK |
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 de acessador for adiada, DBSTATUS_E_BADACCESSOR será definido. |
1 |
Os campos de hora são definidos como zero. |
2 |
DBSTATUS_E_CANTCONVERTVALUE é definido. |
3 |
O fuso horário é definido como zero. |
4 |
Se o buffer do cliente não suficientemente grande, DBSTATUS_S_TRUNCATED será definido. Quando o tipo de servidor inclui frações de segundo, 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 de frações de segundo é ignorado. |
6 |
A data é definida como a data atual, a menos que a origem seja uma literal de hora da cadeia de caracteres e o destino seja DBTYPE_DATE. Nesse caso, será usado 30/12/1899. |
7 |
Se o valor alagar, DBSTATUS_E_DATAOVERFLOW será definido. |
8 |
Os campos de hora são ignorados. |
9 |
Os campos de frações de segundo são ignorados. |
10 |
O componente de data é ignorado. |
11 |
A hora é convertida para o 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 para o tipo de destino. Se houver falha, 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 deverá se conformar com a sintaxe para literais do tipo de destino permitido para que a análise do formato ISO tenha êxito. Para que a análise de OLE tenha êxito, a cadeia de caracteres deve se conformar com a sintaxe reconhecida pelo OLE. Se não for possível analisar a cadeia de caracteres, DBSTATUS_E_CANTCONVERTVALUE será definido. Se qualquer valor de componente estiver fora do intervalo, DBSTATUS_E_DATAOVERFLOW será definido. |
13 |
A cadeia de caracteres é analisada como um literal ISO e convertida para o tipo de destino. Se houver falha, 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 se conformar com a sintaxe de literais datetime, a menos que o destino seja DBTYPE_DATE ou DBTYPE_DBTIMESTAMP. Se for o caso, um literal datetime ou time será permitido para que a análise de formato ISO tenha êxito. Para que a análise de OLE tenha êxito, a cadeia de caracteres deve se conformar com a sintaxe reconhecida pelo OLE. Se não for possível analisar a cadeia de caracteres, DBSTATUS_E_CANTCONVERTVALUE será definido. Se qualquer valor de componente estiver fora do intervalo, DBSTATUS_E_DATAOVERFLOW será definido. |