Обновление приложения с переходом от SQL Server 2005 Native Client
Применимо:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azureazure Synapse Analytics AnalyticsPlatform System (PDW)
Внимание
SQL Server Native Client (SNAC) не поставляется с:
- SQL Server 2022 (16.x) и более поздних версий
- SQL Server Management Studio 19 и более поздних версий
Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.
Для новых проектов используйте один из следующих драйверов:
Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.
В этом разделе рассматриваются критические изменения в собственном клиенте SQL Server с sql Server Native Client в SQL Server 2005 (9.x).
При обновлении компонентов Microsoft Data Access (MDAC) до собственного клиента SQL Server также могут возникнуть некоторые различия в поведении. Дополнительные сведения см. в статье об обновлении приложения до собственного клиента SQL Server из MDAC.
SQL Server Native Client 9.0 поставляется с SQL Server 2005 (9.x). Sql Server Native Client 10.0 поставляется с SQL Server 2008 (10.0.x). SQL Server Native Client 10.5 поставляется с SQL Server 2008 R2 (10.50.x). Sql Server Native Client 11.0 поставляется с SQL Server 2012 (11.x) и SQL Server 2014 (12.x).
Изменено поведение в собственном клиенте SQL Server с SQL Server 2005 (9.x) | Description |
---|---|
OLE DB дополняет данные только до заданного масштаба. | Для преобразований, в которых преобразованные данные отправляются на сервер, собственный клиент SQL Server (начиная с SQL Server 2008 (10.0.x)) заполняет конечные нули в данных только до максимальной длины значений даты и времени . Собственный клиент SQL Server версии 9.0 дополнял данные до 9 разрядов. |
Проверьте DBTYPE_DBTIMESTAMP для ICommandWithParameter::SetParameterInfo. | Собственный клиент SQL Server (начиная с SQL Server 2008 (10.0.x)) реализует требование OLE DB для bScale в ICommandWithParameter::SetParameterInfo, чтобы задать точность дробных секунд для DBTYPE_DBTIMESTAMP. |
Хранимая процедура sp_columns теперь возвращает значение "NO" вместо значения "NO" для столбца IS_NULLABLE. | Начиная с SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)), sp_columns хранимая процедура теперь возвращает значение NOвместо no для столбца IS_NULLABLE. |
SQLSetDescRec, SQLBindParameter и SQLBindCol теперь выполняют проверку согласованности. | До SQL Server Native Client 10.0 параметр SQL_DESC_DATA_PTR не вызвал проверку согласованности для любого типа дескриптора в SQLSetDescRec, SQLBindParameter или SQLBindCol. |
SQLCopyDesc теперь выполняет проверку согласованности дескриптора. | До SQL Server Native Client 10.0 SQLCopyDesc не проверял согласованность при установке поля SQL_DESC_DATA_PTR в определенной записи. |
SQLGetDescRec больше не проверяет согласованность дескриптора. | До SQL Server Native Client 10.0 SQLGetDescRec выполнил проверку согласованности дескриптора при установке поля SQL_DESC_DATA_PTR. Это не требуется спецификацией ODBC и в SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) и более поздних версиях эта проверка согласованности больше не выполняется. |
При выходе значения даты за пределы диапазона теперь происходит возврат другого значения ошибки. | Для типа datetime другое число ошибок будет возвращено собственным клиентом SQL Server (начиная с SQL Server 2008 (10.0.x)) для даты вне диапазона, чем возвращено в предыдущих версиях. В частности, sql Server Native Client 9.0 вернул 22007 для всех значений года вне диапазона в строковых преобразованиях в datetime, а собственный клиент SQL Server начиная с версии 10.0 (SQL Server 2008 (10.0.x)) возвращает значение 22008, если дата находится в диапазоне, поддерживаемом datetime2, но за пределами диапазона, поддерживаемого datetime или smalldatetime. |
В значении datetime усекаются доли секунды, а округление не происходит, если при округлении изменится значение дня. | До SQL Server Native Client 10.0 поведение клиента для значений даты и времени , отправляемых серверу, округляет их до ближайшей 1/300 секунды. Начиная с SQL Server Native Client 10.0, этот сценарий приводит к усечению дробных секунд, если округление изменяет день. |
Возможное усечение секунд для значения даты и времени. | Приложение, созданное с помощью собственного клиента SQL Server 2008 (10.0.x) (или более поздней версии), которое подключается к серверу 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 больше не вызывает изменения значения дня. | До SQL Server Native Client 10.0, если часть времени DBTYPE_DATE находилась в течение полуночи, код преобразования OLE DB вызвал изменение дня. Начиная с SQL Server Native Client 10.0, день не изменится (дробные секунды усечены и не округляются). |
Изменения преобразования IBCPSession::BCColFmt. | Начиная с SQL Server Native Client 10.0, при использовании IBCPSession::BCOColFmt для преобразования SQLDATETIME или SQLDATETIME в строковый тип экспортируется дробное значение. Например, при преобразовании типа SQLDATETIME в тип SQLNVARCHARMAX возвращаются более ранние версии sql Server Native Client. 1989-02-01 00:00:00. Sql Server Native Client 10.0 и более поздних версий возвращают 1989-02-01 00:00:000000. |
Размер пересылаемых данных должен соответствовать длине, заданной параметром 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, привязанный как тип даты и времени, вызывает ошибку. | В SQL Server Native Client 9.0 вставка пустой строки в sql_variant привязанную к типу даты и времени не возникла ошибка. SQL Server Native Client 10.0 (и более поздних версий) правильно создает ошибку в этой ситуации. |
Более строгая проверка параметров типа SQL_C_TYPE _TIMESTAMP и DBTYPE_DBTIMESTAMP. | До SQL Server 2008 (10.0.x) Native Client значения даты и времени округлялись, чтобы соответствовать масштабу столбцов datetime и smalldatetime по SQL Server. Собственный клиент SQL Server 2008 (10.0.x) применяет более строгие правила проверки, определенные в спецификации ядра ODBC для дробных секунд. Если значение параметра не удается преобразовать в тип SQL с помощью масштаба, заданного или подразумеваемого клиентской привязкой, без усечения конечных разрядов, то возвращается ошибка. |
SQL Server может возвращать разные результаты при запуске триггера. | Изменения, внесенные в SQL Server 2008 (10.0.x), могут привести к тому, что приложение возвращает различные результаты из инструкции, которая вызвала запуск триггера при действии NOCOUNT OFF . В такой ситуации в приложении может возникнуть ошибка. Чтобы устранить эту ошибку, задайте NOCOUNT ON в триггере или вызове SQLMoreResults, чтобы перейти к следующему результату. |