Partilhar via


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

Esta seção aborda como converter entre valores datetime e datetimeoffset. As conversões descritas nesta seção já são fornecidas pelo OLE DB ou são uma extensão consistente do OLE DB.

O formato de literais e cadeias de caracteres para datas e horas no OLE DB geralmente segue a norma ISO e não depende da localidade do cliente. Uma exceção é DBTYPE_DATE, em que o padrão é Automação OLE. Entretanto, como o SQL Server Native Client só converte entre tipos quando os dados são transmitidos para ou do cliente, não há como um aplicativo obrigar o SQL Server Native Client a converter entre DBTYPE_DATE e formatos de cadeia de caracteres. Caso contrário, as cadeias de caracteres usam os formatos a seguir (texto entre colchetes indica um elemento opcional):

  • O formato das cadeias de caracteres datetime e datetimeoffset é:

    yyyy-mm-dd[ hh:mm:ss[.9999999][ ± hh:mm]]

  • O formato das cadeias de caracteres time é:

    hh:mm:ss[.9999999]

  • O formato das cadeias de caracteres date é:

    yyyy-mm-dd

ObservaçãoObservação

As versões anteriores do SQL Server Native Client e SQLOLEDB implementavam conversões OLE, caso em que conversões padrão falhavam. Consequentemente, algumas conversões executadas pelo SQL Server Native Client 10.0 e versões posteriores diferem da especificação OLE DB.

As conversões de cadeias de caracteres permitem uma flexibilidade nos espaços em branco e na largura dos campos. Para obter mais informações, consulte a seção sobre cadeias de caracteres e literais dos formatos de dados em Suporte a tipos de dados para melhorias de data/hora do OLE DB.

Seguem as regras de conversão gerais:

  • Quando uma cadeia de caracteres é convertida em um tipo de data/hora, a cadeia de caracteres é analisada primeiro como um literal ISO. Se esse procedimento falhar, a cadeia de caracteres será analisada como um literal de data OLE, que tem componentes de hora.

  • Se não houver uma hora mas o receptor puder armazenar horas, a hora será definida como zero. Se não houver uma data mas o receptor puder armazenar datas, a data será definida como a data atual quando conversões ISO forem usadas e como 1899-12-30 quando conversões OLE forem usadas.

  • Se não houver um fuso horário no tipo de dados que o cliente está utilizando mas o servidor puder armazenar fusos horários, a data no cliente será assumida como o fuso horário do cliente.

  • Se não houver nenhum fuso horário no servidor mas o cliente tiver informações de fusos horários, o fuso horário de UTC será assumido. Esse é um comportamento diferente daquele do servidor.

  • Se houver uma hora mas o receptor não puder armazenar horas, o componente de hora será ignorado.

  • Se houver uma data mas o receptor não puder armazenar datas, o componente de data será ignorado.

  • Se ocorrer o truncamento de segundos ou segundos fracionários ao converter de cliente em servidor, DB_E_ERRORSOCCURRED será retornado e o status DBSTATUS_E_DATAOVERFLOW será definido.

  • Se ocorrer o truncamento de segundos ou segundos fracionários ao converter de servidor em cliente, DBSTATUS_S_TRUNCATED será definido.

Nesta seção

Consulte também

Conceitos

Aprimoramentos de data/hora (OLE DB)