Aktualisieren einer Anwendung auf den OLE DB-Treiber für SQL Server über MDAC
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Es gibt eine Reihe von Unterschieden zwischen dem OLE DB-Treiber für SQL Server und Microsoft Data Access Components (MDAC). Ab Windows Vista werden die Datenzugriffskomponenten als Windows Data Access Components oder Windows DAC bezeichnet. Zwar stellen beide Technologien nativen Datenzugriff auf SQL Server-Datenbanken bereit, der OLE DB-Treiber für SQL Server wurde jedoch speziell für die Verwendung der neuen Features von SQL Server entwickelt und bietet gleichzeitig Abwärtskompatibilität mit früheren Versionen.
Obwohl MDAC Komponenten zur Verwendung von OLE DB, ODBC und ActiveX Data Objects (ADO) enthält, implementiert der OLE DB-Treiber für SQL Server nur OLE DB (ADO hat allerdings Zugriff auf die Funktionen des OLE DB-Treibers für SQL Server).
Der OLE DB-Treiber für SQL Server und MDAC unterscheiden sich in anderen Bereichen wie folgt:
Benutzern, die mit ADO auf den OLE DB-Treiber für SQL Server zugreifen, stehen möglicherweise weniger Filterfunktionen zur Verfügung als bei Zugriff auf den SQL OLE DB-Anbieter.
Wenn eine ADO-Anwendung den OLE DB-Treiber für SQL Server verwendet und versucht, eine berechnete Spalte zu aktualisieren, wird ein Fehler gemeldet. In MDAC wurde das Update zwar akzeptiert, jedoch ignoriert.
Der OLE DB-Treiber für SQL Server 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-Schnittstellen unterstützt.
Die Namen des OLE DB-Treibers für SQL Server unterscheiden sich von den Namen, die mit MDAC verwendet werden.
Mit dem OLE DB-Treiber für SQL Server 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 der OLE DB-Treiber für SQL Server nur Datenbankkonnektivität zur Verfügung. MDAC stellt Funktionen wie Ablaufverfolgung, Verwaltungssteuerelemente und Leistungsindikatoren bereit.
Anwendungen können die OLE DB-Basisdienste mit dem OLE DB-Treiber für SQL Server verwenden. Bei Verwendung der OLE DB-Cursor-Engine sollten sie jedoch die Datentyp-Kompatibilitätsoption verwenden, um potenzielle Probleme zu vermeiden, die auftreten können, da die Cursor-Engine die neuen SQL Server 2005 (9.x)-Datentypen nicht erkennt.
Der OLE DB-Treiber für SQL Server unterstützt den Zugriff auf vorherige SQL Server-Datenbanken.
Der OLE DB-Treiber für SQL Server enthält keine XML-Integration. Der OLE DB-Treiber für SQL Server unterstützt „SELECT ... FOR“-XML-Abfragen, jedoch keine anderen XML-Funktionen. Der OLE DB-Treiber für SQL Server unterstützt jedoch den in SQL Server 2005 (9.x) eingeführten XML-Datentyp.
Der OLE DB-Treiber für SQL Server 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.
Bei MDAC-Verbindungszeichenfolgen ist für das Trusted_Connection-Schlüsselwort ein boolescher Wert (true) zulässig. Eine Verbindungszeichenfolge des OLE DB-Treibers für SQL Server muss yes oder no verwenden.
An Warnungen und Fehlern wurden geringfügige Änderungen vorgenommen. Vom Server zurückgegebene Warnungen und Fehler behalten bei Übergabe an den OLE DB-Treiber für SQL Server 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.
Der OLE DB-Treiber für SQL Server enthält eine strengere Fehlerprüfung als MDAC. Dies bedeutet, dass einige Anwendungen, die den 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 OLE DB-Treiber für SQL Server jedoch schon.
Der OLE DB-Treiber für SQL Server verhält sich anders als MDAC, wenn bei Verbindungen ein Fehler auftritt. MDAC gibt beispielsweise zwischengespeicherte Eigenschaftswerte für eine fehlgeschlagene Verbindung zurück, während der OLE DB-Treiber für SQL Server einen Fehler an die aufrufende Anwendung meldet.
Der OLE DB-Treiber für SQL Server generiert keine Visual Studio Analyzer-Ereignisse, sondern Windows-Ablaufverfolgungsereignisse.
Der OLE DB-Treiber für SQL Server 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 eine Verbindung des OLE DB-Treibers für SQL Server mit SQL Server 2005 (9.x) oder höheren Versionen hergestellt wird, wird Serverfehler 16947 als SQL_ERROR zurückgegeben. Dieser Fehler tritt auf, wenn ein positioniertes Update oder Löschen eine Zeile nicht aktualisieren oder löschen kann. Mit MDAC wird beim Herstellen einer Verbindung mit einer Version von SQL Server der Serverfehler 16947 als Warnung (SQL_SUCCESS_WITH_INFO) zurückgegeben.
Der OLE DB-Treiber für SQL Server implementiert die IDBDataSourceAdmin-Schnittstelle. Hierbei handelt es sich um eine optionale OLE DB-Schnittstelle, die zuvor nicht implementiert wurde. Es ist nur die CreateDataSource-Methode dieser optionalen Schnittstelle implementiert. Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.
Der OLE DB-Treiber für SQL Server 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 (9.x) zurückgegeben werden. Wenn Sie diese Typen als Rückgabewerte verwenden möchten, müssen Sie den OLE DB-Treiber für SQL Server verwenden.
MDAC lässt die Ausführung folgender Anweisungen beim Start manueller und impliziter Transaktionen zu, während der OLE DB-Treiber für SQL Server 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)
Neu konfigurieren
Shutdown
Beenden
Backup
Wenn MDAC-Anwendungen eine Verbindung mit SQL Server herstellen, werden die in SQL Server 2005 (9.x) eingeführten Datentypen als SQL Server 2000 (8.x)-kompatible Datentypen angezeigt, wie in der folgenden Tabelle dargestellt.
SQL Server 2005-Typ SQL Server 2000 varchar(max) text nvarchar(max) ntext varbinary(max) image udt varbinary xml ntext Diese Typzuordnung beeinflusst die für Spaltenmetadaten zurückgegebenen Werte. Beispielsweise hat eine text-Spalte eine maximale Größe von 2.147.483.647, aber der OLE DB-Treiber für SQL Server meldet die maximale Größe von varchar(max) Spalten abhängig von der Plattform als 2.147.483.647 oder -1.
Der OLE DB-Treiber für SQL Server lässt aus Gründen der Abwärtskompatibilität Mehrdeutigkeit in Verbindungszeichenfolgen zu. Einige Schlüsselwörter können also 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 des OLE DB-Treibers für SQL Server lassen möglicherweise keine Mehrdeutigkeit in Verbindungszeichenfolgen zu. Es empfiehlt sich beim Ändern von Anwendungen, den OLE DB-Treiber für SQL Server zu verwenden, um eine Abhängigkeit von der Mehrdeutigkeit von Verbindungszeichenfolgen zu umgehen.
Wenn Sie einen OLE DB-Aufruf zum Starten von Transaktionen verwenden, verhalten sich der OLE DB-Treiber für SQL Server und MDAC unterschiedlich. Mit dem OLE DB-Treiber für SQL Server werden die Transaktionen unmittelbar gestartet, mit MDAC hingegen beginnen sie erst nach dem ersten Datenbankzugriff. Dies kann sich auf das Verhalten gespeicherter Prozeduren und Batches auswirken, da @@TRANCOUNT bei SQL Server 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.
Mit dem OLE DB-Treiber für SQL Server bewirkt ITransactionLocal::BeginTransaction, dass eine Transaktion sofort gestartet wird. 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).
Sowohl der OLE DB-Treiber für SQL Server als auch MDAC unterstützt die READ COMMITTED-Transaktionsisolation mit Zeilenversionsverwaltung, aber nur der OLE DB-Treiber für SQL Server unterstützt die Momentaufnahmen-Transaktionsisolation. (Programmiertechnisch ausgedrückt bedeutet dies, dass die Read Committed-Transaktionsisolation mit Zeilenversionsverwaltung gleichbedeutend mit einer Read Committed-Transaktion ist.)
Weitere Informationen
Erstellen von Anwendungen mit dem OLE DB-Treiber für SQL Server