Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
Az SQL Server 2005 (9.x) által bevezetett új funkciók, mint például több aktív eredményhalmaz (MARS), lekérdezési értesítések, felhasználó által definiált típusok (UDT) vagy az új xml adattípus kihasználásához a meglévő alkalmazások, amelyek ActiveX Data Objects-t (ADO) használnak, az OLE DB Driver for SQL Server adathozzáférési szolgáltatóját kell használniuk.
Annak érdekében, hogy az ADO a legújabb SQL Server verziók új funkcióinak használatát lehetővé tette, néhány fejlesztést hajtottak végre az OLE DB Driver for SQL Server-en, amely kibővíti az OLE DB alapvető funkcióit. Ezek a fejlesztések lehetővé teszik az ADO alkalmazások számára, hogy az SQL Server új funkcióit használják, és két, az SQL Server 2005 (9.x) által bevezetett adattípust használjanak: xml és udt. Ezek a fejlesztések a varchar, nvarchar és varbináris adattípusok fejlesztéseit is kihasználják. Az OLE DB Driver for SQL Server hozzáadja a SSPROP_INIT_DATATYPECOMPATIBILITY inicializációs tulajdonságot a DBPROPSET_SQLSERVERDBINIT tulajdonsághalmazhoz az ADO alkalmazások számára, így az új adattípusok kompatibilis módon legyenek elérhetőek az ADO-val. Ezen felül az SQL Server OLE DB Driver egy új kapcsolódási string kulcsszót is definiál, DataTypeCompatibility néven, amely a kapcsolati láncban van beállítva.
Megjegyzés:
A meglévő ADO alkalmazások hozzáférhetnek és frissíthetik az XML, UDT, valamint a nagy értékű szöveg- és bináris mezőértékeket az SQLOLEDB szolgáltató segítségével. Az új, nagyobb varchar(max), nvarchar(max) és varbinary(max) adattípusok adLongVarChar, adLongVarWChar és adLongVarBinary ADO típusokként kerülnek vissza. Az XML oszlopok adLongVarChar, az UDT oszlopok adVarBinary formátumúak lesznek. Ha azonban az SQL Server OLE DB Driver-ét (MSOLEDBSQL19 vagy MSOLEDBSQL) használod az SQLOLEDB helyett, akkor mindenképp kell beállítanod a DataTypeCompatibility kulcskulcsszót "80"-ra, hogy az új adattípusok helyesen illeszkedjenek az ADO adattípusokhoz.
OLE DB illesztőprogram engedélyezése SQL Server számára az ado-tól
Az OLE DB Driver SQL Server használatának lehetővé tételéhez az ADO alkalmazásoknak a következő kulcsszavakat kell implementálniuk a kapcsolati stringjeikben:
Provider=MSOLEDBSQL19DataTypeCompatibility=80
További információért az OLE DB Driver for SQL Server által támogatott ADO kapcsolatok string kulcsszavakról lásd: Connection String Words using OLE DB Driver for SQL Server.
Az alábbi kód egy példa arra, hogyan lehet létrehozni egy ADO kapcsolati láncot olyan láncsor, amely teljes mértékben engedélyezett az SQL Server OLE DB Driverrel való működésre, beleértve a MARS funkció engedélyezését is:
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
Példák
Az alábbi szakaszok példákat mutatnak arra, hogyan használhatod az ADO-t az SQL Server OLE DB Driver-jével.
XML oszlop adatok lekérése
Ebben a példában egy rekordkészletet használnak az SQL Server AdventureWorks mintaadatbázis XML oszlopának adatainak visszakeresésére és megjelenítésére.
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
Megjegyzés:
Az XML oszlopok nem támogatják a rekordkészlet-szűrést. Ha használjuk, hiba jelenik meg.
UDT oszlop adatok lekérdezése
Ebben a példában egy Command objektumot használnak egy SQL lekérdezés végrehajtására, amely UDT-t ad vissza, az UDT adatokat frissítik, majd az új adatokat visszaillesztik az adatbázisba. Ez a példa feltételezi, hogy a Point UDT már regisztrálva van az adatbázisban.
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
A MARS engedélyezése és használata
Ebben a példában a kapcsolati string úgy van létrehozva, hogy az OLE DB Driver for SQL Server segítségével engedélyezze a MARS-t, majd két rekordkészlet objektumot hoznak létre, amelyek ugyanazon a kapcsolaton futnak.
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
Az OLE DB szolgáltató korábbi verzióiban ez a kód implicit kapcsolatot eredményezett a második végrehajtásnál, mivel egyetlen kapcsolaton csak egy aktív eredményhalmazt lehetett megnyitni. Mivel az implicit kapcsolat nem volt felosztva az OLE DB kapcsolati poolban, ez a viselkedés plusz terhelést okozna. Az OLE DB Driver for SQL Server által elérhető MARS funkcióval több aktív eredményt kapsz egy kapcsolaton.
Lásd még
Alkalmazások létrehozása az SQL Serverhez készült OLE DB-illesztővel