Aktualizowanie aplikacji z programu SQL Server 2005 Native Client
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Ważny
klienta natywnego programu SQL Server (SNAC) nie jest dostarczany z:
- SQL Server 2022 (16.x) i nowsze wersje
- SQL Server Management Studio 19 i nowsze wersje
Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.
W przypadku nowych projektów użyj jednego z następujących czynników:
- sterownik Microsoft ODBC dla programu SQL Server
- sterownik Microsoft OLE DB dla programu SQL Server
W przypadku programu SQLNCLI, który jest dostarczany jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), zobacz ten wyjątek cyklu wsparcia .
W tym temacie omówiono zmiany powodujące niezgodność w kliencie natywnym programu SQL Server od programu SQL Server Native Client w programie SQL Server 2005 (9.x).
Podczas uaktualniania z programu Microsoft Data Access Components (MDAC) do programu SQL Server Native Client może również wystąpić pewne różnice w zachowaniu. Aby uzyskać więcej informacji, zobacz Aktualizowanie aplikacji do klienta natywnego programu SQL Server zMDAC.
Sql Server Native Client 9.0 dostarczany z programem SQL Server 2005 (9.x). Sql Server Native Client 10.0 dostarczany z programem SQL Server 2008 (10.0.x). Sql Server Native Client 10.5 dostarczany z programem SQL Server 2008 R2 (10.50.x). Program SQL Server Native Client 11.0 dostarczany z programem SQL Server 2012 (11.x) i programem SQL Server 2014 (12.x).
Zmienione zachowanie w kliencie natywnym programu SQL Server od programu SQL Server 2005 (9.x) | Opis |
---|---|
Baza danych OLE DB jest dopełniana tylko do zdefiniowanej skali. | W przypadku konwersji, w przypadku których przekonwertowane dane są wysyłane do serwera, klient natywny programu SQL Server (począwszy od programu SQL Server 2008 (10.0.x)) zawiera końcowe zera w danych tylko do maksymalnej długości wartości daty/godziny. Sql Server Native Client 9.0 dopełniony do 9 cyfr. |
Zweryfikuj DBTYPE_DBTIMESTAMP dla polecenia ICommandWithParameter::SetParameterInfo. | Klient natywny programu SQL Server (począwszy od programu SQL Server 2008 (10.0.x)) implementuje wymaganie OLE DB dla bScale w parametrze ICommandWithParameter::SetParameterInfo w celu ustawienia dokładności sekund ułamkowych dla DBTYPE_DBTIMESTAMP. |
Procedura składowana sp_columns zwraca teraz "NIE" zamiast "NIE" dla kolumny IS_NULLABLE. | Począwszy od programu SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)), sp_columns procedura składowana zwraca teraz "NIE" zamiast "NIE" dla kolumny IS_NULLABLE. |
SqlSetDescRec, SQLBindParameter i SQLBindCol teraz przeprowadzają sprawdzanie spójności. | Przed programem SQL Server Native Client 10.0 ustawienie SQL_DESC_DATA_PTR nie spowodowało sprawdzania spójności dla żadnego typu deskryptora w kodzie SQLSetDescRec, SQLBindParameter lub SQLBindCol. |
Funkcja SQLCopyDesc teraz sprawdza spójność deskryptora. | Przed programem SQL Server Native Client 10.0 program SQLCopyDesc nie wykonał sprawdzania spójności, gdy pole SQL_DESC_DATA_PTR zostało ustawione na określonym rekordzie. |
SqlGetDescRec nie wykonuje już sprawdzania spójności deskryptora. | Przed programem SQL Server Native Client 10.0 sqlGetDescRec wykonał sprawdzanie spójności deskryptora podczas ustawiania pola SQL_DESC_DATA_PTR. Nie było to wymagane przez specyfikację ODBC i w programie SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) i nowszych wersjach ten test spójności nie jest już wykonywany. |
Inny błąd zwracany, gdy data jest poza zakresem. | W przypadku typu data/godzina zostanie zwrócony inny numer błędu przez klienta natywnego programu SQL Server (począwszy od programu SQL Server 2008 (10.0.x)) dla daty poza zakresem niż została zwrócona we wcześniejszych wersjach. W szczególności, Program SQL Server Native Client 9.0 zwrócił 22007 r. dla wszystkich wartości roku poza zakresem w konwersjach ciągów na data/godzinai klienta natywnego programu SQL Server, począwszy od wersji 10.0 (SQL Server 2008 (10).0.x)) zwraca wartość 22008, gdy data mieści się w zakresie obsługiwanym przez data/godzina2, ale poza zakresem obsługiwanym przez data/godzina lub smalldatetime. |
wartość datetime obcina ułamkowe sekundy, a nie zaokrągla, jeśli zaokrąglanie zmieni dzień. | Przed programem SQL Server Native Client 10.0 zachowanie klienta dla wartości daty/godziny wysyłanych do serwera jest zaokrąglenie ich do najbliższej 1/300 sekundy. Począwszy od programu SQL Server Native Client 10.0, ten scenariusz powoduje obcinanie sekund ułamkowych, jeśli zaokrąglanie zmienia dzień. |
Możliwe obcinanie sekund dla wartości data/godzina. | Aplikacja utworzona przy użyciu programu SQL Server 2008 (10.0.x) Native Client (lub nowszego), który nawiązuje połączenie z serwerem PROGRAMU SQL Server 2005, obcina sekundy i ułamkowe części danych wysyłanych do serwera, jeśli powiązasz z kolumną datetime z identyfikatorem typu DBTYPE_DBTIMESTAMP (OLE DB) lub SQL_TIMESTAMP (ODBC) i skalę 0. Na przykład: Dane wejściowe: 1994-08-21 21:21:36.000 Wstawione dane: 1994-08-21 21:21:00.000 |
Konwersja danych OLE DB z DBTYPE_DBTIME na DBTYPE_DATE nie może już spowodować zmiany dnia. | Przed programem SQL Server Native Client 10.0, jeśli część czasowa DBTYPE_DATE mieściła się w połowie sekundy od północy, kod konwersji OLE DB spowodował zmianę dnia. Począwszy od programu SQL Server Native Client 10.0, dzień nie ulegnie zmianie (ułamkowe sekundy są obcinane i nie zaokrąglane). |
IBCPSession::BCColFmt — zmiany konwersji. | Począwszy od programu SQL Server Native Client 10.0, w przypadku używania funkcji IBCPSession::BCOColFmt w celu przekonwertowania wartości SQLDATETIME lub SQLDATETIME na typ ciągu jest eksportowana wartość ułamkowa. Na przykład podczas konwertowania typu SQLDATETIME na typ SQLNVARCHARMAX zwracane są wcześniejsze wersje klienta natywnego programu SQL Server 1989-02-01 00:00:00. Program SQL Server Native Client 10.0 i nowsze wersje zwracają 1989-02-01 00:00:00.0000000. |
Rozmiar wysłanych danych musi być zgodny z długością określoną w SQL_LEN_DATA_AT_EXEC. | W przypadku korzystania z SQL_LEN_DATA_AT_EXEC rozmiar danych musi być zgodny z długością określoną przy użyciu SQL_LEN_DATA_AT_EXEC. Możesz użyć SQL_DATA_AT_EXEC, ale istnieją potencjalne korzyści z wydajności do korzystania z SQL_LEN_DATA_AT_EXEC. |
Aplikacje niestandardowe korzystające z interfejsu API BCP mogą teraz wyświetlić ostrzeżenie. | Interfejs API BCP wygeneruje komunikat ostrzegawczy, jeśli długość danych jest większa niż określona długość pola dla wszystkich typów. Wcześniej to ostrzeżenie zostało podane tylko dla typów znaków, ale nie zostanie wydane dla wszystkich typów. |
Wstawianie pustego ciągu do sql_variant powiązanego jako typ daty/godziny powoduje wygenerowanie błędu. | W programie SQL Server Native Client 9.0 wstawianie pustego ciągu do sql_variant powiązanego jako typ daty/godziny nie wygenerowało błędu. Program SQL Server Native Client 10.0 (i nowsze) poprawnie generuje błąd w tej sytuacji. |
Bardziej rygorystyczna weryfikacja parametrów SQL_C_TYPE _TIMESTAMP i DBTYPE_DBTIMESTAMP. | Przed programem SQL Server 2008 (10.0.x) Native Client wartości data/godzina zostały zaokrąglone w celu dopasowania do skali daty/godziny i kolumny smalldatetime programu SQL Server. Program SQL Server 2008 (10.0.x) Native Client (i nowsze) stosuje bardziej rygorystyczne reguły sprawdzania poprawności zdefiniowane w specyfikacji rdzeniA ODBC dla sekund ułamkowych. Jeśli nie można przekonwertować wartości parametru na typ SQL przy użyciu skali określonej lub dorozumianej przez powiązanie klienta bez obcinania cyfr końcowych, zwracany jest błąd. |
Program SQL Server może zwracać różne wyniki po uruchomieniu wyzwalacza. | Zmiany wprowadzone w programie SQL Server 2008 (10.0.x) mogą spowodować, że aplikacja będzie miała inne wyniki zwrócone z instrukcji, która spowodowała uruchomienie wyzwalacza, gdy NOCOUNT OFF. W takiej sytuacji aplikacja może wygenerować błąd. Aby rozwiązać ten błąd, ustaw NOCOUNT ON w wyzwalaczu lub wywołaj metodę SQLMoreResults, aby przejść do następnego wyniku. |