Verwenden von ADO mit SQL Server Native Client
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Wichtig
Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL) oder den neuesten Microsoft ODBC Driver for SQL Server. Informationen zu SQLNCLI, das als Komponente von SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Supportlebenszyklus-Ausnahme.
Um die in SQL Server 2005 (9.x) eingeführten neuen Features wie mehrere aktive Resultsets (MARS), Abfragebenachrichtigungen, benutzerdefinierte Typen (UDTs) oder den neuen xml-Datentyp nutzen zu können, sollten vorhandene Anwendungen, die ActiveX-Datenobjekte (ActiveX Data Objects, ADO) verwenden, den SQL Server Native Client OLE DB-Anbieter als Datenzugriffsanbieter verwenden.
Wenn Sie keines der neuen Features verwenden müssen, die in SQL Server 2005 (9.x) eingeführt wurden, ist es nicht erforderlich, den SQL Server Native Client OLE DB-Anbieter zu verwenden. Sie können weiterhin Ihren aktuellen Datenzugriffsanbieter verwenden, der in der Regel SQLOLEDB ist. Wenn Sie eine vorhandene Anwendung verbessern und die in SQL Server 2005 (9.x) eingeführten neuen Features verwenden müssen, sollten Sie SQL Server Native Client OLE DB-Anbieter verwenden.
Hinweis
Wenn Sie eine neue Anwendung entwickeln, empfiehlt es sich, ADO.NET und den .NET Framework Datenanbieter für SQL Server anstelle von SQL Server Native Client zu verwenden, um auf alle neuen Features der neuesten Versionen von SQL Server zuzugreifen. Weitere Informationen zum .NET Framework-Datenanbieter für SQL Server finden Sie in der .NET Framework SDK-Dokumentation für ADO.NET.
Damit ADO neue Features neuer Versionen von SQL Server verwenden kann, wurden einige Verbesserungen am SQL Server Native Client OLE DB-Anbieter vorgenommen, der die Kernfeatures von OLE DB erweitert. Diese Erweiterungen erlauben es ADO-Anwendungen, neuere SQL Server-Features zu verwenden und zwei Datentypen zu verarbeiten, die in SQL Server 2005 (9.x) eingeführt wurden: XML und UDT. Diese Erweiterungen machen sich auch Erweiterungen der Datentypen varchar, nvarchar und varbinary zunutze. SQL Server Native Client fügt die SSPROP_INIT_DATATYPECOMPATIBILITY Initialisierungseigenschaft der DBPROPSET_SQLSERVERDBINIT-Eigenschaft hinzu, die für die Verwendung durch ADO-Anwendungen festgelegt ist, sodass die neuen Datentypen in einer mit ADO kompatiblen Weise verfügbar gemacht werden. Darüber hinaus definiert der SQL Server Native Client OLE DB-Anbieter auch eine neue Verbindungszeichenfolge Schlüsselwort (keyword) mit dem Namen DataTypeCompatibility, die in der Verbindungszeichenfolge festgelegt ist.
Hinweis
Vorhandene ADO-Anwendungen können über den SQLOLEDB-Anbieter auf XML, UDT, umfangreiche Textwerte und Werte von Binärfeldern zugreifen und diese aktualisieren. Die neuen größeren Datentypen varchar(max) , nvarchar(max) und varbinary(max) werden als die ADO-Typen adLongVarChar, adLongVarWChar bzw. adLongVarBinary zurückgegeben. XML-Spalten werden als adLongVarChar zurückgegeben, und UDT-Spalten werden als adVarBinary zurückgegeben. Wenn Sie jedoch den SQL Server Native Client OLE DB-Anbieter (SQLNCLI11) anstelle von SQLOLEDB verwenden, müssen Sie sicherstellen, dass Sie die DataTypeCompatibility-Schlüsselwort (keyword) auf "80" festlegen, damit die neuen Datentypen den ADO-Datentypen ordnungsgemäß zugeordnet werden.
Aktivieren von SQL Server Native Client über ADO
Um die Verwendung von SQL Server Native Client zu ermöglichen, müssen ADO-Anwendungen die folgenden Schlüsselwörter in ihren Verbindungszeichenfolgen implementieren:
Provider=SQLNCLI11
DataTypeCompatibility=80
Weitere Informationen zu den in SQL Server Native Client unterstützten Schlüsselwörtern für ADO-Verbindungszeichenfolgen finden Sie unter Verwenden von Verbindungszeichenfolgenschlüsselwörtern mit SQL Server Native Client.
Im Folgenden finden Sie ein Beispiel für das Einrichten einer ADO-Verbindungszeichenfolge, die vollständig für die Arbeit mit SQL Server Native Client aktiviert ist, einschließlich der Aktivierung des MARS-Features:
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
Beispiele
Die folgenden Abschnitte enthalten Beispiele für die Verwendung von ADO mit dem SQL Server Native Client OLE DB-Anbieters.
Abrufen von XML-Spaltendaten
In diesem Beispiel wird ein Recordset verwendet, um die Daten aus einer XML-Spalte der SQL Server-Beispieldatenbank AdventureWorks abzurufen und anzuzeigen.
Dim con As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sXMLResult As String
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;"
con.Open
' Get the xml data as a recordset.
Set rst.ActiveConnection = con
rst.Source = "SELECT AdditionalContactInfo FROM Person.Contact " _
& "WHERE AdditionalContactInfo IS NOT NULL"
rst.Open
' Display the data in the recordset.
While (Not rst.EOF)
sXMLResult = rst.Fields("AdditionalContactInfo").Value
Debug.Print (sXMLResult)
rst.MoveNext
End While
con.Close
Set con = Nothing
Hinweis
Recordset-Filter werden bei XML-Spalten nicht unterstützt. Wenn sie verwendet werden, wird ein Fehler zurückgegeben.
Abrufen von UDT-Spaltendaten
In diesem Beispiel wird ein Command-Objekt verwendet, um eine SQL-Abfrage auszuführen, die einen UDT zurückgibt. Der UDT wird aktualisiert, und neue Daten werden anschließend wieder in die Datenbank eingefügt. In diesem Beispiel wird davon ausgegangen, dass der UDT Point bereits in der Datenbank registriert wurde.
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim strOldUDT As String
Dim strNewUDT As String
Dim aryTempUDT() As String
Dim strTempID As String
Dim i As Integer
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;"
con.Open
' Get the UDT value.
Set cmd.ActiveConnection = con
cmd.CommandText = "SELECT ID, Pnt FROM dbo.Points.ToString()"
Set rst = cmd.Execute
strTempID = rst.Fields(0).Value
strOldUDT = rst.Fields(1).Value
' Do something with the UDT by adding i to each point.
arytempUDT = Split(strOldUDT, ",")
i = 3
strNewUDT = LTrim(Str(Int(aryTempUDT(0)) + i)) + "," + _
LTrim(Str(Int(aryTempUDT(1)) + i))
' Insert the new value back into the database.
cmd.CommandText = "UPDATE dbo.Points SET Pnt = '" + strNewUDT + _
"' WHERE ID = '" + strTempID + "'"
cmd.Execute
con.Close
Set con = Nothing
Aktivieren und Verwenden von MARS
In diesem Beispiel wird die Verbindungszeichenfolge erstellt, um MARS über den SQL Server Native Client OLE DB-Anbieter zu aktivieren, und dann werden zwei Recordsetobjekte erstellt, die mit derselben Verbindung ausgeführt werden.
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
Dim recordset1 As New ADODB.Recordset
Dim recordset2 As New ADODB.Recordset
Dim recordsaffected As Integer
Set recordset1 = con.Execute("SELECT * FROM Table1", recordsaffected, adCmdText)
Set recordset2 = con.Execute("SELECT * FROM Table2", recordsaffected, adCmdText)
con.Close
Set con = Nothing
In früheren Versionen des OLE DB-Anbieters hätte dieser Code bewirkt, dass für den zweiten Execute-Aufruf eine Standardverbindung erstellt wird, weil in diesen Versionen nur ein aktives Resultset pro Verbindung geöffnet werden konnte. Weil die Standardverbindung nicht in den OLE DB-Verbindungspool aufgenommen wurde, bedeutete dies zusätzlichen Aufwand. Wenn das MARS-Feature vom SQL Server Native Client OLE DB-Anbieter verfügbar gemacht wird, erhalten Sie mehrere aktive Ergebnisse für die eine Verbindung.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Feedback senden und anzeigen für