Aktualisieren einer Anwendung von MDAC auf SQL Server Native Client

Es gibt eine Reihe von Unterschieden zwischen SQL Server Native Client und Microsoft Data Access Components (MDAC; ab Windows Vista werden die Datenzugriffskomponenten als Windows Data Access Components oder Windows DAC bezeichnet). Durch beide Technologien wird systemeigener Datenzugriff auf SQL Server-Datenbanken bereitgestellt, SQL Server SQL Native Client wurde jedoch speziell für die Verwendung der neuen Funktionen von SQL Server 2005 entwickelt und bietet gleichzeitig Abwärtskompatibilität mit früheren Versionen.

Anhand der Informationen in diesem Thema können Sie die MDAC-Anwendung (oder Windows DAC) auf die Version SQL Server Native Client aktualisieren, die im Lieferumfang von SQL Server 2005 enthalten ist. Informationen zur Aktualisierung dieser Anwendung auf SQL Server Native Client, das im Lieferumfang von SQL Server 2008 R2 enthalten ist, finden Sie unter Aktualisieren einer Anwendung von SQL Server 2008 R2 Native Client von SQL Server 2005 Native Client.

Obwohl MDAC Komponenten zur Verwendung von OLE DB, ODBC und ActiveX Data Objects (ADO) enthält, implementiert SQL Server Native Client nur OLE DB und ODBC (ADO hat allerdings Zugriff auf die Funktionen von SQL Server Native Client).

SQL Server Native Client und MDAC unterscheiden sich in anderen Bereichen wie folgt:

  • Benutzern, die mit ADO auf einen SQL Server Native Client-Anbieter zugreifen, stehen möglicherweise weniger Filterfunktionen zur Verfügung als bei Zugriff auf einen SQL OLE DB-Anbieter.

  • Wenn eine ADO-Anwendung SQL Server Native Client verwendet und versucht, eine berechnete Spalte zu aktualisieren, wird ein Fehler gemeldet. Mit MDAC wurde die Aktualisierung akzeptiert, jedoch ignoriert.

  • SQL Server Native Client ist eine einzelne, eigenständige Dynamic Link Library-Datei (DLL). Die öffentlich verfügbaren Schnittstellen wurden auf ein Minimum reduziert, um sowohl die Verteilung zu erleichtern als auch die Sicherheitsrisiken einzuschränken.

  • Es werden nur OLE DB und ODBC-Schnittstellen unterstützt.

  • Die Namen des SQL Server Native Client-OLE DB-Anbieters und des ODBC-Treibers unterscheiden sich von den mit MDAC verwendeten Namen.

  • Mit SQL Server Native Client sind von MDAC-Komponenten bereitgestellte Benutzerzugriffsfunktionen verfügbar. Dazu gehören u. a.: Verbindungspooling, ADO-Unterstützung und Clientcursorunterstützung. Wenn eine dieser Funktionen verwendet wird, stellt SQL Server Native Client nur Datenbankkonnektivität zur Verfügung. MDAC stellt Funktionen wie Ablaufverfolgung, Verwaltungssteuerelemente und Leistungsindikatoren bereit.

  • Anwendungen können die OLE DB-Basisdienste mit SQL Server Native Client verwenden. Bei Verwendung des OLE DB-Cursormoduls sollten sie jedoch die Datentyp-Kompatibilitätsoption verwenden, um potenzielle Probleme zu vermeiden, die auftreten können, da das Cursormodul die neuen SQL Server 2005-Datentypen nicht erkennt.

  • SQL Server Native Client unterstützt den Zugriff auf frühere SQL Server-Datenbanken ab SQL Server 7.0 und neuere Versionen.

  • SQL Server Native Client enthält keine XML-Integration. SQL Server Native Client unterstützt SELECT … FOR XML-Abfragen, jedoch keine anderen XML-Funktionen. SQL Server Native Client unterstützt jedoch den in SQL Server 2005 eingeführten xml-Datentyp.

  • SQL Server Native Client unterstützt das Konfigurieren clientseitiger Netzwerkbibliotheken nur mithilfe von Verbindungszeichenfolgenattributen. Wenn Sie eine umfassendere Netzwerkbibliothekskonfiguration benötigen, müssen Sie SQL Server-Konfigurations-Manager verwenden.

  • SQL Server Native Client ist nicht kompatibel mit odbcbcp.dll. Anwendungen, die sowohl APIs für ODBC als auch bcp verwenden, müssen erneut erstellt werden, um mit sqlncli10.lib verknüpft zu werden und SQL Server Native Client verwenden zu können.

  • SQL Server Native Client wird vom Microsoft OLE DB-Anbieter für ODBC (MSDASQL) nicht unterstützt. Wenn Sie den MDAC SQLODBC-Treiber mit MSDASQL oder mit ADO verwenden, sollten Sie in SQL Server Native Client OLE DB verwenden.

  • Bei MDAC-Verbindungszeichenfolgen ist für das Trusted_Connection-Schlüsselwort ein boolescher Wert (true) zulässig. Für eine SQL Server Native Client-Verbindungszeichenfolge ist yes oder no erforderlich.

  • An Warnungen und Fehlern wurden geringfügige Änderungen vorgenommen. Vom Server zurückgegebene Warnungen und Fehler behalten bei Übergabe an den SQL Server Native Client den gleichen Schweregrad bei. Sie sollten sicherstellen, dass die Anwendung gründlich getestet wurde, wenn Sie auf das Abfangen bestimmter Warnungen und Fehler angewiesen sind.

  • SQL Server Native Client enthält eine strengere Fehlerprüfung als MDAC. Dies bedeutet, dass einige Anwendungen, die den ODBC- und OLE DB-Spezifikationen nicht hundertprozentig entsprechen, sich anders verhalten. Der SQLOLEDB-Anbieter hat beispielsweise die Regel, dass Parameternamen für Ergebnisparameter mit "@" beginnen müssen, nicht erzwungen; der SQL Server Native Client OLE DB-Anbieter hat ihn dagegen erzwungen.

  • SQL Server Native Client verhält sich in Bezug auf fehlgeschlagene Verbindungen anders als MDAC. MDAC gibt beispielsweise zwischengespeicherte Eigenschaftswerte für eine fehlgeschlagene Verbindung zurück, während SQL Server Native Client einen Fehler an die aufrufende Anwendung meldet.

  • SQL Server Native Client generiert keine Visual Studio Analyzer-Ereignisse, sondern stattdessen Windows-Ablaufverfolgungsereignisse.

  • SQL Server Native Client kann nicht mit perfmon verwendet werden. Perfmon ist ein Windows-Tool, das nur mit DSNs verwendet werden kann, die den im Lieferumfang von Windows enthaltenen MDAC SQLODBC-Treiber verwenden.

  • Wenn SQL Server Native Client mit SQL Server 2005 verbunden wird, wird Serverfehler 16947 als SQL_ERROR zurückgegeben. Dieser Fehler tritt auf, wenn eine positionierte Aktualisierung oder Löschung eine Zeile nicht aktualisieren oder löschen kann. In SQL Server 2000 und in früheren Versionen sowie mit MDAC wird beim Herstellen einer Verbindung mit einer Version von SQL Server der Serverfehler 16947 als Warnung (SQL_SUCCESS_WITH_INFO) zurückgegeben.

  • SQL Server Native Client implementiert die IDBDataSourceAdmin-Schnittstelle. Hierbei handelt es sich um eine optionale OLE DB-Schnittstelle, die zuvor nicht implementiert wurde. Es wurde nur die CreateDataSource-Methode dieser optionalen Schnittstelle implementiert. Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

  • Der SQL Server Native Client OLE DB-Anbieter gibt Synonyme in den Schemarowsets TABLES und TABLE_INFO zurück, wobei der Wert TABLE_TYPE auf SYNONYM gesetzt ist.

  • Rückgabewerte vom Datentyp varchar(max), nvarchar(max), varbinary(max), XML, UDT oder sonstige LOB-Typen (Large Object) können nicht an Clienttreiberversionen vor SQL Server 2005 zurückgegeben werden. Wenn Sie diese Typen als Rückgabewerte verwenden möchten, müssen Sie SQL Server Native Client verwenden.

  • MDAC lässt die Ausführung folgender Anweisungen beim Start manueller und impliziter Transaktionen zu, während SQL Server Native Client diese Möglichkeit nicht bietet. Die Anweisungen müssen im Autocommitmodus ausgeführt werden.

    • Alle Volltextvorgänge (Index- und Katalog-DDL)

    • Alle Datenbankvorgänge (CREATE DATABASE, ALTER DATABASE, DROP DATABASE)

    • Neukonfigurieren

    • Herunterfahren

    • Abbrechen

    • Sichern

  • Wenn MDAC-Anwendungen eine Verbindung mit SQL Server herstellen, werden die in SQL Server 2005 eingeführten Datentypen als SQL Server 2000-kompatible Datentypen angezeigt, wie in der folgenden Tabelle dargestellt.

    SQL Server 2005-Typ

    SQL Server 2000-Typ

    varchar(max)

    text

    nvarchar(max)

    ntext

    varbinary(max)

    image

    udt

    varbinary

    xml

    ntext

    Diese Typzuordnung beeinflusst die für Spaltenmetadaten zurückgegebenen Werte. Eine text-Spalte hat eine maximale Größe von 2.147.483.647. SQL Server Native Client ODBC meldet die maximale Größe von varchar(max)-Spalten jedoch als SQL_SS_LENGTH_UNLIMITED, und SQL Server Native Client OLE DB meldet die maximale Größe von varchar(max)-Spalten abhängig von der Plattform als 2.147.483.647 oder -1.

  • SQL Server Native Client lässt aus Gründen der Abwärtskompatibilität Mehrdeutigkeit in Verbindungszeichenfolgen zu (einige Schlüsselwörter können beispielsweise mehr als einmal angegeben werden, und konfliktverursachende Schlüsselwörter können mit einer Auflösung basierend auf der Position oder Rangfolge zugelassen werden). Zukünftige Versionen von SQL Server Native Client lassen möglicherweise keine Mehrdeutigkeit in Verbindungszeichenfolgen zu. Es empfiehlt sich beim Ändern von Anwendungen, SQL Server Native Client zu verwenden, um eine Abhängigkeit von der Mehrdeutigkeit von Verbindungszeichenfolgen zu umgehen.

  • Wenn Sie einen ODBC- oder OLE DB-Aufruf zum Starten von Transaktionen verwenden, verhalten sich SQL Server Native Client und MDAC unterschiedlich. Mit SQL Server Native Client werden die Transaktionen unmittelbar gestartet, mit MDAC hingegen beginnen sie erst nach dem ersten Datenzugriff. Dies kann sich auf das Verhalten gespeicherter Prozeduren und Batches auswirken, da bei SQL Server @@TRANCOUNT nach Beenden der Ausführung eines Batches oder einer gespeicherten Prozedur unverändert gegenüber dem Startzeitpunkt des Batches oder der gespeicherten Prozedur sein muss. Weitere Informationen finden Sie unter Rollbacks und Commits in gespeicherten Prozeduren und Triggern.

  • Mit SQL Server Native Client führt ITransactionLocal::BeginTransaction zu einem sofortigen Start der Transaktion. Mit MDAC wurde der Transaktionsstart verzögert, bis die Anwendung eine Anweisung ausgeführt hat, die eine Transaktion im impliziten Transaktionsmodus erforderte. Weitere Informationen finden Sie unter SET IMPLICIT_TRANSACTIONS (Transact-SQL).

  • Es treten möglicherweise Fehler auf, wenn Sie den SQL Server Native Client-Treiber mit System.Data.Odbc verwenden, um auf einen SQL Server-Servercomputer zuzugreifen, der neue, SQL Server-spezifische Datentypen oder Features bereitstellt. System.Data.Odbc bietet eine allgemeine ODBC-Implementierung und stellt demzufolge keine herstellerspezifischen Funktionen oder Erweiterungen zur Verfügung. (Der SQL Server Native Client-Treiber wird aktualisiert, um die neuesten SQL Server-Funktionen systemeigen zu unterstützen.) Zur Umgehung dieses Problems können Sie entweder zu MDAC zurückkehren oder auf System.Data.SqlClient migrieren.

Sowohl SQL Server Native Client als auch MDAC unterstützen die Read Committed-Isolation mit Zeilenversionsverwaltung, aber nur SQL Server Native Client unterstützt die Momentaufnahmen-Transaktionsisolation. (Programmiertechnisch ausgedrückt, die Read Committed-Transaktionsisolation mit Zeilenversionsverwaltung ist gleichbedeutend mit einer Read Committed-Transaktion.) Weitere Informationen finden Sie unter Auswählen von auf Zeilenversionsverwaltung basierenden Isolationsstufen.