Udostępnij za pośrednictwem


Aktualizowanie aplikacji do natywnego klienta programu SQL Server z usługi MDAC

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Ważna

Klient natywny SQL Servera (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 sterowników:

W przypadku programu SQLNCLI dostarczanego jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), proszę sprawdzić wyjątek cyklu wsparcia .

Istnieje wiele różnic między programem SQL Server Native Client i składnikami dostępu do danych firmy Microsoft (MDAC, począwszy od systemu Windows Vista, składniki dostępu do danych są teraz nazywane składnikami windows Data Access Components lub Windows DAC). Mimo że obie zapewniają natywny dostęp do baz danych programu SQL Server, program SQL Server Native Client został specjalnie zaprojektowany w celu uwidocznienia nowych funkcji programu SQL Server 2005 (9.x), jednocześnie zachowując zgodność z poprzednimi wersjami.

Informacje zawarte w tym artykule pomagają zaktualizować aplikację MDAC (lub windows DAC) tak, aby była aktualna w wersji klienta natywnego programu SQL Server, który został uwzględniony w programie SQL Server 2005 (9.x). Aby ułatwić aktualizowanie tej aplikacji przy użyciu wersji klienta natywnego programu SQL Server dostarczanego w programie SQL Server, zobacz Aktualizowanie aplikacji z programu SQL Server 2005 Native Client.

Uwaga / Notatka

Klient natywny programu SQL Server został usunięty z programu SQL Server 2022 (16.x).

Ponadto mimo że usługa MDAC zawiera składniki do używania obiektów danych OLE DB, ODBC i ActiveX (ADO), klient natywny programu SQL Server implementuje tylko bazy danych OLE DB i ODBC (chociaż ADO może uzyskiwać dostęp do funkcji klienta natywnego programu SQL Server).

Program SQL Server Native Client i MDAC różnią się w innych obszarach:

  • Użytkownicy, którzy używają narzędzia ADO do uzyskiwania dostępu do dostawcy klienta natywnego programu SQL Server, mogą znaleźć mniej funkcji filtrowania niż w przypadku uzyskania dostępu do dostawcy OLE DB SQL.

  • Jeśli aplikacja ADO używa klienta natywnego programu SQL Server i próbuje zaktualizować obliczoną kolumnę, zostanie zgłoszony błąd. W przypadku usługi MDAC aktualizacja została zaakceptowana, ale zignorowana.

  • Sql Server Native Client to pojedynczy plik biblioteki linków dynamicznych (DLL). Publicznie udostępnione interfejsy zostały ograniczone do minimum, zarówno w celu ułatwienia dystrybucji, jak i ograniczenia zagrożenia bezpieczeństwa.

  • Obsługiwane są tylko interfejsy OLE DB i ODBC.

  • Dostawcy OLE DB klienta SQL Server Native i nazwy sterowników ODBC różnią się od nazw używanych z usługą MDAC.

  • Funkcja dostępna dla użytkownika dostarczana przez składniki MDAC jest dostępna w przypadku korzystania z klienta natywnego programu SQL Server. Obejmuje to, ale nie jest ograniczone do następujących: buforowanie połączeń, obsługa ADO i obsługa kursorów klienta. Jeśli są używane dowolne z tych funkcji, klient natywny programu SQL Server dostarcza tylko łączność z bazą danych. MDAC oferuje funkcje takie jak śledzenie, kontrole zarządzania oraz liczniki wydajności.

  • Aplikacje mogą używać podstawowych usług OLE DB z klientem natywnym programu SQL Server, ale jeśli korzystasz z aparatu kursora OLE DB, powinni użyć opcji zgodności typu danych, aby uniknąć potencjalnych problemów, które mogą wystąpić, ponieważ aparat kursora nie zna nowych typów danych programu SQL Server 2005 (9.x).

  • Klient natywny programu SQL Server obsługuje dostęp do poprzednich baz danych programu SQL Server.

  • Klient natywny programu SQL Server nie zawiera integracji XML. Klient natywny programu SQL Server obsługuje polecenie SELECT ... W przypadku zapytań XML, ale nie obsługuje żadnych innych funkcji XML. Jednak klient natywny programu SQL Server obsługuje typ danych XML wprowadzony w programie SQL Server 2005 (9.x).

  • Klient natywny programu SQL Server obsługuje konfigurowanie bibliotek sieciowych po stronie klienta przy użyciu tylko atrybutów parametrów połączenia. Jeśli potrzebujesz bardziej kompletnej konfiguracji biblioteki sieciowej, musisz użyć SQL Server Configuration Manager.

  • Klient natywny programu SQL Server nie jest zgodny z programem odbcbcp.dll. Aplikacje korzystające zarówno z interfejsów API ODBC, jak i bcp muszą zostać ponownie skompilowane w celu połączenia z biblioteką sqlncli11.lib w celu korzystania z klienta natywnego programu SQL Server.

  • Klient natywny programu SQL Server nie jest obsługiwany przez dostawcę microsoft OLE DB dla ODBC (MSDASQL). Jeśli używasz sterownika MDAC SQLODBC ze sterownikiem MSDASQL lub MDAC SQLODBC z funkcją ADO, użyj bazy danych OLE DB w kliencie natywnym programu SQL Server.

  • Ciągi połączeń MDAC pozwalają na wartość boolowską (true) dla Trusted_Connection słowa kluczowego. Parametry połączenia klienta natywnego programu SQL Server muszą używać wartości tak lub nie.

  • Wprowadzono drobne zmiany w ostrzeżeniach i błędach. Ostrzeżenia i błędy zwracane przez serwer zachowują teraz tę samą ważność po przekazaniu do klienta natywnego programu SQL Server. Jeśli polegasz na wykrywaniu konkretnych ostrzeżeń i błędów, powinieneś upewnić się, że dokładnie przetestowałeś swoją aplikację.

  • Klient natywny programu SQL Server ma ostrzejsze sprawdzanie błędów niż MDAC, co oznacza, że niektóre aplikacje, które nie są ściśle zgodne ze specyfikacjami ODBC i OLE DB, mogą zachowywać się inaczej. Na przykład dostawca SQLOLEDB nie wymusił reguły, że nazwy parametrów muszą zaczynać się od "@" dla parametrów wyników, ale dostawca OLE DB klienta natywnego programu SQL Server.

  • Klient natywny programu SQL Server zachowuje się inaczej niż W przypadku połączeń, które zakończyły się niepowodzeniem. Na przykład funkcja MDAC zwraca buforowane wartości właściwości dla połączenia, które zakończyło się niepowodzeniem, podczas gdy klient natywny programu SQL Server zgłasza błąd aplikacji wywołującej.

  • Klient natywny programu SQL Server nie generuje zdarzeń analizatora programu Visual Studio, ale zamiast tego generuje zdarzenia śledzenia systemu Windows.

  • Nie można używać klienta natywnego programu SQL Server z wydajnością. Perfmon to narzędzie Windows, które można używać wyłącznie z DSN-ami korzystającymi ze sterownika MDAC SQLODBC dołączonego do Windows.

  • Gdy program SQL Server Native Client jest połączony z programem SQL Server 2005 (9.x) i nowszymi wersjami, błąd serwera 16947 jest zwracany jako SQL_ERROR. Błąd ten występuje, gdy aktualizacja lub usunięcie pozycjonowane nie pozwala na aktualizację lub usunięcie wiersza. W MDAC podczas łączenia z dowolną wersją SQL Server błąd serwera 16947 zwracany jest jako ostrzeżenie (SQL_SUCCESS_WITH_INFO).

  • Klient natywny programu SQL Server implementuje interfejs IDBDataSourceAdmin , który jest opcjonalnym interfejsem OLE DB, który nie został wcześniej zaimplementowany, ale zaimplementowano tylko metodę CreateDataSource tego opcjonalnego interfejsu. Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.

  • Dostawca OLE DB klienta natywnego programu SQL Server zwraca synonimy w tabelach i zestawach wierszy schematu TABLE_INFO z ustawieniem TABLE_TYPE synonimem.

  • Zwracane wartości typu danych varchar(max), nvarchar(max), varbinary(max), xml, udt lub inne duże typy obiektów nie mogą być zwracane do wersji klienta wcześniejszych niż SQL Server 2005 (9.x). Jeśli chcesz użyć tych typów jako wartości zwracanych, musisz użyć klienta natywnego programu SQL Server.

  • Usługa MDAC umożliwia wykonywanie następujących instrukcji na początku transakcji ręcznych i niejawnych, ale program SQL Server Native Client nie. Muszą być wykonywane w trybie automatycznego zatwierdzania.

    • Wszystkie operacje pełnotekstowe (indeks i katalog DDL)

    • Wszystkie operacje bazowe (tworzenie bazy danych, zmiana bazy, usuwanie bazy danych)

    • Zmienić konfigurację

    • Zamknięcie

    • Zabić

    • Backup

  • Gdy aplikacje MDAC łączą się z SQL Serverem, typy danych wprowadzone w SQL Server 2005 (9.x) będą wyglądać jako typy danych zgodne z SQL Server 2000 (8.x), jak pokazano w poniższej tabeli.

    Typ SQL Server 2005 SQL Server 2000 typ
    varchar(max) tekst
    nvarchar(max) ntext
    varbinary(max) image
    Udt varbinary
    xml ntext

    Takie mapowanie wpływa na wartości zwracane dla metadanych kolumn. Na przykład kolumna tekstowa ma maksymalny rozmiar 2147 483 647, ale program SQL Server Native Client ODBC zgłasza maksymalny rozmiar kolumn varchar(max) jako SQL_SS_LENGTH_UNLIMITED, a w zależności od platformy raportuje maksymalny rozmiar kolumn varchar(max).

  • Klient natywny programu SQL Server umożliwia niejednoznaczność w parametrach połączenia (na przykład niektóre słowa kluczowe mogą być określone więcej niż raz, a sprzeczne słowa kluczowe mogą być dozwolone z rozpoznawaniem na podstawie pozycji lub pierwszeństwa) ze względu na zgodność z poprzednimi wersjami. Przyszłe wersje klienta natywnego programu SQL Server mogą nie zezwalać na niejednoznaczność w parametrach połączenia. Dobrym rozwiązaniem jest modyfikowanie aplikacji w celu korzystania z klienta natywnego programu SQL Server w celu wyeliminowania zależności od niejednoznaczności parametrów połączenia.

  • Jeśli używasz wywołania ODBC lub OLE DB do uruchamiania transakcji, istnieje różnica w zachowaniu między klientem natywnym programu SQL Server i usługą MDAC; Transakcje zaczynają się natychmiast od klienta natywnego programu SQL Server, ale transakcje rozpoczną się po pierwszym dostępie do bazy danych przy użyciu usługi MDAC. Może to wpływać na zachowanie procedur i partii przechowywanych, ponieważ SQL Server wymaga, aby @@TRANCOUNT były takie same po zakończeniu wykonania procedury wsadowej lub zapisanej, jak na początku procedury wsadowej lub zapisanej.

  • W przypadku klienta natywnego programu SQL Server ITransactionLocal::BeginTransaction spowoduje natychmiastowe uruchomienie transakcji. W przypadku funkcji MDAC rozpoczęcie transakcji zostało opóźnione, dopóki aplikacja nie wykonała instrukcji, która wymagała transakcji w trybie niejawnej transakcji. Aby uzyskać więcej informacji, zobacz SET IMPLICIT_TRANSACTIONS (Transact-SQL).

  • Błędy mogą wystąpić podczas używania sterownika klienta natywnego programu SQL Server z systemem System.Data.Odbc w celu uzyskania dostępu do komputera z programem SQL Server, który uwidacznia nowe typy danych lub funkcje specyficzne dla programu SQL Server. System.Data.Odbc zapewnia ogólną implementację ODBC, a następnie nie uwidacznia funkcji ani rozszerzeń specyficznych dla dostawcy. (Sterownik klienta natywnego programu SQL Server jest aktualizowany w celu natywnego obsługi najnowszych funkcji programu SQL Server). Aby obejść ten problem, możesz wrócić do usługi MDAC lub przeprowadzić migrację do Microsoft.Data.SqlClient (zalecane) lub System.Data.SqlClient.

Zarówno program SQL Server Native Client, jak i MDAC obsługują izolację zatwierdzonych transakcji odczytu przy użyciu przechowywania wersji wierszy, ale tylko klient natywny programu SQL Server obsługuje izolację transakcji migawki. (W terminologii programistycznej izolacja transakcji odczytu przy użyciu wersjonowania wiersza jest tym samym co transakcja z zatwierdzaniem odczytu.)