Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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=SQLNCLI11DataTypeCompatibility=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.