Обновление приложения при переходе от собственного клиента SQL Server 2005 на собственный клиент SQL Server 2008
SQL Server 2008 включает собственный клиент SQL Server версии 10.0. В этом разделе рассматриваются отличия работы текущей версии собственного клиента для SQL Server от предыдущих версий.
При обновлении с переходом от компонентов доступа к данным MDAC к собственному клиенту версии 10.0 для SQL Server также наблюдаются некоторые изменения в поведении. Дополнительные сведения см. в разделе Обновление приложения с переходом от компонентов MDAC к собственному клиенту SQL Server.
Изменения в работе собственного клиента SQL Server 10.0 |
Описание |
|---|---|
OLE DB дополняет данные только до заданного масштаба. |
Что касается преобразований, при которых преобразованные данные передаются на сервер, то собственный клиент версии 10.0 для SQL Server дополняет данные завершающими нулями только до максимальной длины значений datetime. Собственный клиент версии 9.0 и более ранних версий для SQL Server дополнял данные до 9 разрядов. |
Проверьте правильность типа DBTYPE_DBTIMESTAMP для вызова ICommandWithParameter::SetParameterInfo. |
Собственный клиент версии 10.0 для SQL Server реализует требование OLE DB, согласно которому аргумент bScale функции ICommandWithParameter::SetParameterInfo должен быть задан с точностью до долей секунды для структуры DBTYPE_DBTIMESTAMP. |
Хранимая процедура sp_columns теперь возвращает значение «NO» вместо значения «NO» применительно к столбцу IS_NULLABLE. |
В собственном клиенте версии 10.0 для SQL Server хранимая процедура sp_columns теперь возвращает значение «NO» вместо значения «NO» применительно к столбцу IS_NULLABLE. |
Функции SQLSetDescRec, SQLBindParameter и SQLBindCol теперь обеспечивают проверку согласованности. |
До появления собственного клиента версии 10.0 для SQL Server установка параметра SQL_DESC_DATA_PTR не приводила к выполнению проверки согласованности функциями SQLSetDescRec, SQLBindParameter или SQLBindCol. |
Теперь функция SQLCopyDesc проверяет согласованность дескрипторов. |
До появления собственного клиента версии 10.0 для SQL Server функция SQLCopyDesc не проводила проверку согласованности данных, если для конкретной записи был задан параметр SQL_DESC_DATA_PTR. |
Функция SQLGetDescRec больше не проверяет согласованность дескрипторов. |
До появления собственного клиента версии 10.0 для SQL Server функция SQLGetDescRec проводила проверку согласованности данных, если был задан параметр SQL_DESC_DATA_PTR. Этого не требовалось по спецификации ODBC, и собственный клиент версии 10.0 для SQL Server уже не проводит эту проверку согласованности. |
При выходе значения даты за пределы диапазона теперь происходит возврат другого значения ошибки. |
Что касается типа datetime, то при выходе за пределы диапазона допустимых значений собственный клиент версии 10.0 для SQL Server возвращает номер ошибки, отличный от возвращаемого в предыдущих версиях. В частности, собственный клиент версии 9.0 для SQL Server возвращал номер ошибки 22007 для всех выходящих за пределы диапазона значений года при преобразовании строки в тип datetime, а собственный клиент версии 10.0 для SQL Server возвращает 22008, если дата находится в пределах допустимого диапазона для типа datetime2, но за пределами диапазона, поддерживаемого типами datetime и smalldatetime. |
В значении datetime усекаются доли секунды, а округление не происходит, если при округлении изменится значение дня. |
До появления собственного клиента версии 10.0 для SQL Server клиент, передавая данные типа datetime на сервер, округлял их до ближайшей 1/300-й доли секунды. В собственном клиенте версии 10.0 для SQL Server в этой ситуации происходит усечение долей секунды, если округление приводит к изменению значения дня. |
Возможно усечение секунд в значениях типа datetime. |
В приложении на основе собственного клиента SQL Server 2008 (или более поздней версии), которое соединяется с сервером SQL Server 2005 (или более ранней версии), секунды и доли секунд в датах, передаваемых на сервер, усекаются при привязке столбцов datetime с идентификатором типа DBTYPE_DBTIMESTAMP (OLE DB) или SQL_TIMESTAMP (ODBC) и масштабе 0. Например: Входные данные: 1994-08-21 21:21:36.000 Вставляемые данные: 1994-08-21 21:21:00.000 |
Преобразование данных OLE DB из типа DBTYPE_DBTIME в DBTYPE_DATE больше не вызывает изменения значения дня. |
До появления собственного клиента версии 10.0 для SQL Server, если часть времени для значения DBTYPE_DATE отстояла от полуночи не более чем на полсекунды, то применение кода преобразования OLE DB приводило к изменению дня. В собственном клиенте версии 10.0 для SQL Server день не изменяется (доли секунды усекаются, а не округляются). |
Изменения преобразования IBCPSession::BCColFmt. |
В собственном клиенте версии 10.0 для SQL Server при использовании метода IBCPSession::BCOColFmt для преобразования типа SQLDATETIME или SQLDATETIME в строковый тип происходит экспорт дробной части. Например, при преобразовании типа SQLDATETIME в тип SQLNVARCHARMAX более ранние версии собственного клиента для SQL Server возвращали следующее: 1989-02-01 00:00:00. Собственный клиент версии 10.0 для SQL Server возвращает 1989-02-01 00:00:00.0000000. |
Размер пересылаемых данных должен соответствовать длине, заданной параметром SQL_LEN_DATA_AT_EXEC. |
При использовании параметра SQL_LEN_DATA_AT_EXEC размер данных должен соответствовать длине, заданной параметром SQL_LEN_DATA_AT_EXEC. Можно использовать параметр SQL_DATA_AT_EXEC, но SQL_LEN_DATA_AT_EXEC дает некоторый выигрыш в производительности. |
В пользовательских приложениях, в которых используется API BCP, теперь могут обнаруживаться предупреждающие сообщения. |
API BCP выдает предупреждающее сообщение, если длина данных превышает заданную длину для полей всех типов. Раньше это предупреждение выдавалось только для символьных типов, но не для всех типов. |
Вставка пустой строки в объект типа sql_variant, привязанный как тип даты и времени, вызывает ошибку. |
В собственном клиенте версии 9.0 для SQL Server вставка пустой строки в объект типа sql_variant, привязанный как тип даты и времени, не вызывала ошибки. Собственный клиент версии 10.0 для SQL Server в этом случае совершенно обоснованно возвращает ошибку. |
Более строгая проверка параметров типа SQL_C_TYPE _TIMESTAMP и DBTYPE_DBTIMESTAMP. |
До появления собственного клиента для SQL Server 2008 происходило округление значений datetime для соответствия масштабу столбцов datetime и smalldatetime в SQL Server. Теперь в собственном клиенте для SQL Server 2008 применяют более строгие правила проверки для долей секунды, определенные в базовой спецификации ODBC. Если значение параметра не удается преобразовать в тип SQL с помощью масштаба, заданного или подразумеваемого клиентской привязкой, без усечения конечных разрядов, то возвращается ошибка. |
SQL Server может возвращать различные результаты при выполнении триггера. |
Изменения, появившиеся в SQL Server 2008, могут привести к тому, что приложение получит другие результаты при выполнении инструкции, вызвавшей выполнение триггера при действующем параметре NOCOUNT OFF. В такой ситуации в приложении может возникнуть ошибка. Чтобы решить эту проблему, установите в триггере NOCOUNT ON или вызовите метод SQLMoreResults для перехода к следующему результату. |
Журнал изменений
Обновленное содержимое |
|---|
Добавлен пункт, описывающий усечение секунд для столбцов datetime. |