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


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

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

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

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

    Гггг-Мм-dd[ чч:мм:сс[.9999999][ ?? чч:мм]]

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

    чч:мм:сс[.9999999]

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

    гггг-мм-дд

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

Преобразования, выполняемые при передаче от клиента к серверу
Описывает преобразования даты и времени, выполняемые между клиентским приложением, написанным с помощью SQL Server Native Client OLE DB, и SQL Server 2008 (или более поздней версии).

Преобразования, выполняемые при передаче от сервера к клиенту
Описывает преобразования даты и времени, выполненные между SQL Server 2008 (или более поздней версией) и клиентским приложением, написанным с помощью SQL Server Native Client OLE DB.

См. также:

Улучшения функций даты и времени (OLE DB)