Att använda ADO med SQL Server Native Client

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Important

SQL Server Native Client (SNAC) levereras inte med:

  • SQL Server 2022 (16.x) och senare versioner
  • SQL Server Management Studio 19 och senare versioner

SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.

Använd någon av följande drivrutiner för nya projekt:

För SQLNCLI som levereras som en komponent i SQL Server-databasmotorn (versioner 2012 till och med 2019), se det här Support Lifecycle-undantag.

För att dra nytta av nya funktioner som introducerats i SQL Server 2005 (9.x) såsom flera aktiva resultatuppsättningar (MARS), frågenotiser, användardefinierade typer (UDT) eller den nya xml-datatypen, bör befintliga applikationer som använder ActiveX Data Objects (ADO) använda SQL Server Native Client OLE DB-leverantören som sin dataåtkomstleverantör.

Om du inte behöver använda några av de nya funktionerna som introducerades i SQL Server 2005 (9.x), finns det inget behov av att använda SQL Server Native Client OLE DB-leverantören; du kan fortsätta använda din nuvarande dataåtkomstleverantör, som vanligtvis är SQLOLEDB. Om du förbättrar en befintlig applikation och behöver använda de nya funktionerna som introducerats i SQL Server 2005 (9.x), bör du använda SQL Server Native Client OLE DB-leverantör.

Note

Om du utvecklar en ny applikation rekommenderas det att du överväger att använda ADO.NET och .NET Framework Data Provider för SQL Server istället för SQL Server Native Client för att komma åt alla nya funktioner i de senaste versionerna av SQL Server. För mer information om .NET Framework Data Provider för SQL Server, se dokumentationen för .NET Framework SDK för ADO.NET.

För att möjliggöra för ADO att använda nya funktioner i nyare versioner av SQL Server har vissa förbättringar gjorts av SQL Server Native Client OLE DB-leverantören som utökar kärnfunktionerna i OLE DB. Dessa förbättringar gör det möjligt för ADO-applikationer att använda nyare SQL Server-funktioner och att konsumera två datatyper som introducerades i SQL Server 2005 (9.x): xml och udt. Dessa förbättringar utnyttjar också förbättringar av varchar-, nvarchar- och varbinärdatatyperna . SQL Server Native Client lägger till egenskapen SSPROP_INIT_DATATYPECOMPATIBILITY initialisering till egenskapen DBPROPSET_SQLSERVERDBINIT som används av ADO-applikationer så att de nya datatyperna exponeras på ett sätt som är kompatibelt med ADO. Dessutom definierar SQL Server Native Client OLE DB-leverantören också ett nytt nyckelord för reťazec pripojenia med namnet DataTypeCompatibility som sätts i reťazec pripojenia.

Note

Befintliga ADO-applikationer kan komma åt och uppdatera XML, UDT samt stora värdetexter och binära fältvärden med hjälp av SQLOLEDB-leverantören. De nya större varchar(max)-, nvarchar(max)- och varbinär-(max) -datatyperna returneras som ADO-typerna adLongVarChar, adLongVarWChar respektive adLongVarBinary . XML-kolumner returneras som adLongVarChar, och UDT-kolumner returneras som adVarBinary. Men om du använder SQL Server Native Client OLE DB-leverantören (SQLNCLI11) istället för SQLOLEDB måste du se till att sätta nyckelordet DataTypeCompatibility till "80" så att de nya datatyperna korrekt mappas till ADO-datatyperna.

Aktivering av SQL Server Native Client från ADO

För att möjliggöra användning av SQL Server Native Client behöver ADO-applikationer implementera följande nyckelord i sina anslutningssträngar:

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

För mer information om de ADO-anslutningssträngsnyckelord som stöds i SQL Server Native Client, se Användning av Connection String Keywords med SQL Server Native Client.

Följande är ett exempel på att etablera en ADO-reťazec pripojenia som är fullt aktiverad för att fungera med SQL Server Native Client, inklusive aktivering av MARS-funktionen:

Dim con As New ADODB.Connection  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _  
         & "DataTypeCompatibility=80;" _  
         & "MARS Connection=True;"  
con.Open  

Exempel

Följande avsnitt ger exempel på hur du kan använda ADO med SQL Server Native Client OLE DB-leverantören.

Hämta XML-kolumndata

I detta exempel används en postmängd för att hämta och visa data från en XML-kolumn i SQL Server AdventureWorks-exempeldatabasen .

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  

Note

Postfiltering stöds inte med XML-kolumner. Om det används kommer ett fel att returneras.

Hämta UDT-kolumndata

I detta exempel används ett Command-objekt för att köra en SQL-fråga som returnerar en UDT, UDT-data uppdateras och sedan återinförs den nya datan i databasen. Detta exempel antar att punkt-UDT redan har registrerats i databasen.

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  

Aktivering och användning av MARS

I detta exempel konstrueras reťazec pripojenia för att möjliggöra MARS via SQL Server Native Client OLE DB-leverantören, och sedan skapas två postset-objekt för att köras med samma anslutning.

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  

I tidigare versioner av OLE DB-leverantören orsakade denna kod att en implicit anslutning skapades vid den andra exekveringen eftersom endast en aktiv uppsättning resultat kunde öppnas per enskild anslutning. Eftersom den implicita anslutningen inte poolades i OLE DB-anslutningspoolen skulle detta orsaka extra overhead. Med MARS-funktionen som exponeras av SQL Server Native Client OLE DB-leverantören får du flera aktiva resultat på samma anslutning.