Привязки и преобразования (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.
В этом разделе
Преобразования, выполняемые при передаче от клиента к серверу
Описывает преобразования даты-времени, проводимые между клиентским приложением, написанным с собственным клиентом OLE DB SQL Server, и SQL Server 2008 (или более поздней версией).Преобразования, выполняемые при передаче от сервера к клиенту
Описывает преобразования даты-времени, проводимые между SQL Server (или более поздней версией) и клиентским приложением, написанным с собственным клиентом OLE DB SQL Server 2008.