Freigeben über


Verwenden von ADO mit SQL Server Native Client

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Wichtig

SQL Server Native Client (SNAC) wird nicht ausgeliefert mit:

  • SQL Server 2022 (16.x) und höhere Versionen
  • SQL Server Management Studio 19 und höhere Versionen

Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der ältere Microsoft OLE DB-Anbieter für SQL Server (SQLOLEDB) werden für die entwicklung neuer Anwendungen nicht empfohlen.

Für neue Projekte verwenden Sie einen der folgenden Treiber:

Informationen zu SQLNCLI, das als Komponente der SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Ausnahme für den Supportlebenszyklus.

Um neue Features zu nutzen, die in SQL Server 2005 (9.x) eingeführt wurden, z. B. mehrere aktive Resultsets (MARS), Abfragebenachrichtigungen, benutzerdefinierte Typen (UDTs) oder den neuen XML-Datentyp , sollten vorhandene Anwendungen, die ActiveX Data Objects (ADO) verwenden, den SQL Server Native Client OLE DB-Anbieter als Datenzugriffsanbieter verwenden.

Wenn Sie keine der neuen Features verwenden müssen, die in SQL Server 2005 (9.x) eingeführt wurden, ist es nicht erforderlich, den OLE DB-Anbieter von SQL Server Native Client zu verwenden; Sie können weiterhin Ihren aktuellen Datenzugriffsanbieter verwenden, der in der Regel SQLOLEDB ist. Wenn Sie eine vorhandene Anwendung verbessern und die neuen Features verwenden müssen, die in SQL Server 2005 (9.x) eingeführt wurden, sollten Sie den OLE DB-Anbieter von SQL Server Native Client verwenden.

Hinweis

Wenn Sie eine neue Anwendung entwickeln, empfiehlt es sich, ADO.NET und .NET Framework Datenanbieter für SQL Server anstelle von SQL Server Native Client zu verwenden, um auf alle neuen Features neuer 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 OLE DB-Anbieter von SQL Server Native Client vorgenommen, der die Kernfunktionen 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 zum DBPROPSET_SQLSERVERDBINIT Eigenschaftensatz für die Verwendung durch ADO-Anwendungen hinzu, sodass die neuen Datentypen auf eine Weise verfügbar gemacht werden, die mit ADO kompatibel ist. Darüber hinaus definiert der OLE DB-Anbieter von SQL Server Native Client auch ein neues Verbindungszeichenfolge Schlüsselwort mit dem Namen DataTypeCompatibility, das 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 OLE DB-Anbieter für SQL Server Native Client (SQLNCLI11) anstelle von SQLOLEDB verwenden, müssen Sie sicherstellen, dass Sie das DataTypeCompatibility-Schlüsselwort 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 Verbindungszeichenfolge implementieren:

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

Weitere Informationen zu den ADO-Verbindungszeichenfolgenstichwörtern, die in SQL Server Native Client unterstützt werden, finden Sie unter Verwenden von Verbindungszeichenfolgenstichwörtern mit SQL Server Native Client.

Im Folgenden finden Sie ein Beispiel für die Einrichtung 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 OLE DB-Anbieter für SQL Server Native Client.

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 der 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. Mit dem MARS-Feature, das vom SQL Server Native Client OLE DB-Anbieter verfügbar gemacht wird, erhalten Sie mehrere aktive Ergebnisse für die eine Verbindung.

Weitere Informationen

Erstellen von Anwendungen mit SQL Server Native Client