Not
Å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
Analysplattformssystem (PDW)
SQL-databas i Microsoft Fabric
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 OLE DB-drivrutinen för SQL Server som sin dataåtkomstleverantör.
För att möjliggöra för ADO att använda nya funktioner från nyare versioner av SQL Server har vissa förbättringar gjorts i OLE DB-drivrutinen för SQL Server, 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 . OLE DB Driver för SQL Server lägger till egenskapen SSPROP_INIT_DATATYPECOMPATIBILITY initialisering till DBPROPSET_SQLSERVERDBINIT-egenskapsuppsättningen för användning av ADO-applikationer så att de nya datatyperna exponeras på ett sätt som är kompatibelt med ADO. Dessutom definierar OLE DB-drivrutinen för SQL Server även ett nytt anslutningssträngsnyckelord kallat DataTypeCompatibility som sätts i anslutningssträngen.
Anmärkning
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 OLE DB-drivrutinen för SQL Server (MSOLEDBSQL19 eller MSOLEDBSQL) istället för SQLOLEDB, måste du se till att sätta DataTypeCompatibility nyckelord till "80" så att de nya datatyperna korrekt mappas till ADO-datatyperna.
Aktivering av OLE DB-drivrutin för SQL Server från ADO
För att möjliggöra användning av OLE DB-drivrutin för SQL Server behöver ADO-applikationer implementera följande nyckelord i sina anslutningssträngar:
Provider=MSOLEDBSQL19DataTypeCompatibility=80
För mer information om de ADO connections-strängsnyckelord som stöds i OLE DB Driver för SQL Server, se Using Connection String Keywords with OLE DB Driver for SQL Server.
Följande kod är ett exempel på att etablera en ADO-anslutningssträng som är fullt aktiverad för att fungera med OLE DB-drivrutinen för SQL Server, inklusive aktivering av MARS-funktionen:
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
Examples
Följande avsnitt ger exempel på hur du kan använda ADO med OLE DB-drivrutinen för SQL Server.
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=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "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
Anmärkning
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=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "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 anslutningssträngen för att aktivera MARS via OLE DB-drivrutinen för SQL Server, och sedan skapas två postuppsättningsobjekt för att köras med samma anslutning.
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "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 var poolad i OLE DB-anslutningspoolen skulle detta beteende orsaka extra overhead. Med MARS-funktionen som exponeras av OLE DB-drivrutinen för SQL Server får du flera aktiva resultat på samma anslutning.