Поделиться через


Привязки и преобразования (OLE DB)

В этом разделе описано преобразование между типами datetime и datetimeoffset. Преобразования, описанные в этом разделе, либо уже предоставлены OLE DB, либо являются согласованным расширением OLE DB.

Формат литералов и строк для дат и времени в OLE DB обычно соответствует ISO и не зависит от языкового стандарта, установленного на клиенте. Единственное исключение — DBTYPE_DATE, для которого стандартом является OLE Automation. Однако, поскольку собственный клиент SQL Server проводит преобразования из одного типа в другой только при передаче данных с клиента или на клиент, приложение никак не может заставить собственный клиент SQL Server проводить преобразования между типом DBTYPE_DATE и строковыми форматами. Во всех остальных случаях строки используют следующие форматы (скобками отмечены необязательные элементы):

  • Формат строк datetime и datetimeoffset:

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

  • Формат строк time:

    hh:mm:ss[.9999999]

  • Формат строк date:

    yyyy-mm-dd

ПримечаниеПримечание

Предыдущие версии собственного клиента SQL Server и SQLOLEDB реализовали преобразования OLE в случаях, когда стандартные преобразования возвращали ошибку. В результате некоторые преобразования, проводимые собственным клиентом версии 10.0 SQL Server отличаются от спецификации OLE DB.

Преобразования из строк обеспечивают гибкость в отношении пробелов и ширины полей. Дополнительные сведения см. в разделе «Форматы данных: Строки и литералы» раздела Улучшения поддержки типов данных даты-времени OLE DB.

Далее приведены общие правила преобразования:

  • При преобразовании строки в тип данных даты-времени строка сначала проходит синтаксический анализ как литерал ISO. Если анализ завершился неудачей, строка проходит синтаксический анализ как литерал даты OLE, содержащий компонент времени.

  • Если время отсутствует, но получатель способен его хранить, оно устанавливается в нулевое значение. Если дата отсутствует, но принимающий объект может хранить дату, этой дате присваивается значение сегодняшней даты при использовании преобразования ISO и 30 декабря 1899 года при использовании преобразования OLE.

  • Если клиент использует тип даты, в котором не указан часовой пояс, но сервер может хранить информацию о часовом поясе, предполагается, что данные клиента используют часовой пояс клиента.

  • Если клиент содержит информацию о часовом поясе, но на сервере данных часового пояса нет, предполагается, что часовой пояс задан в формате UTC. Это отличается от поведения сервера.

  • Если время присутствует, но получатель не способен его хранить, компонент времени пропускается.

  • Если дата присутствует, но получатель не способен ее хранить, компонент даты пропускается.

  • Если при преобразовании с клиента на сервер происходит усечение секунд или долей секунд, возвращается значение DB_E_ERRORSOCCURRED и устанавливается состояние DBSTATUS_E_DATAOVERFLOW.

  • Если усечение секунд или долей секунд происходит при преобразовании с клиента на сервер, устанавливается состояние DBSTATUS_S_TRUNCATED.

В этом разделе

См. также

Основные понятия