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. Conseqüentemente, algumas conversões executadas pelo SQL Server Native Client 10.0 são diferentes 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