Sdílet prostřednictvím


Použití ADO s ovladačem OLE DB pro SQL Server

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Stáhnout ovladač OLE DB

Aby bylo možné využít nové funkce zavedené v SQL Server 2005 (9.x), jako jsou více aktivních sad výsledků (MARS), notifikace dotazů, uživatelsky definované typy (UDT) nebo nový typ dat xml , měly by stávající aplikace využívající ActiveX Data Objects (ADO) používat OLE DB Driver for SQL Server jako poskytovatele přístupu k datům.

Aby bylo možné ADO využívat nové funkce novějších verzí SQL Serveru, byla provedena některá vylepšení OLE DB Driver pro SQL Server, který rozšiřuje základní funkce OLE DB. Tato vylepšení umožňují ADO aplikacím využívat novější funkce SQL Serveru a využívat dva datové typy zavedené v SQL Server 2005 (9.x): xml a udt. Tato vylepšení také využívají vylepšení datových typů varchar, nvarchar a varbinár. OLE DB Driver for SQL Server přidává vlastnost SSPROP_INIT_DATATYPECOMPATIBILITY inicializace do sady DBPROPSET_SQLSERVERDBINIT pro použití ADO aplikacemi, aby nové datové typy byly vystaveny způsobem kompatibilním s ADO. Kromě toho OLE DB Driver pro SQL Server také definuje nové klíčové slovo řetězce spojení s názvem DataTypeCompatibility (Kompatibilita ), které je nastaveno v řetězci připojení.

Poznámka:

Stávající ADO aplikace mohou přistupovat k XML, UDT a hodnotám textových a binárních polí s velkými hodnotami pomocí poskytovatele SQLOLEDB a aktualizovat je. Nové větší datové typy varchar(max), nvarchar(max) a varbinary(max) se vracejí jako ADO typy adLongVarChar, adLongVarWChar a adLongVarBinary . XML sloupce se vracejí jako adLongVarChar a sloupce UDT jako adVarBinary. Pokud však použijete OLE DB Driver pro SQL Server (MSOLEDBSQL19 nebo MSOLEDBSQL) místo SQLOLEDB, musíte nastavit klíčové slovo DataTypeCompatibility na "80", aby nové datové typy správně odpovídaly ADO datovým typům.

Enabling OLE DB Driver for SQL Server from ADO

Aby bylo možné použít ovladač OLE DB pro SQL Server, budou ADO aplikace muset implementovat následující klíčová slova ve svých spojovacích řetězcích:

  • Provider=MSOLEDBSQL19

  • DataTypeCompatibility=80

Pro více informací o klíčových slovech ADO connections string podporovaných v OLE DB Driver for SQL Server viz Použití klíčových slov spojovacích řetězců s OLE DB Driver pro SQL Server.

Následující kód je příkladem vytvoření ADO spojovacího řetězce, který je plně povolen pro práci s OLE DB Driver for SQL Server, včetně povolení funkce MARS:

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

Následující sekce poskytují příklady, jak můžete použít ADO s ovladačem OLE DB pro SQL Server.

Získávání XML sloupcových dat

V tomto příkladu se k načtení a zobrazení dat z XML sloupce v SQL Server AdventureWorks ukázkové databázi používá sada záznamů.

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

Poznámka:

Filtrování souborů záznamů není podporováno u XML sloupců. Pokud je použito, vrátí se chyba.

Získávání dat sloupců UDT

V tomto příkladu se objekt příkazu použije k vykonání SQL dotazu, který vrátí UDT, data UDT jsou aktualizována a nová data jsou následně vložena zpět do databáze. Tento příklad předpokládá, že bod UDT již byl v databázi registrován.

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

Zapnutí a používání MARS

V tomto příkladu je řetězec spojení vytvořen tak, aby umožnil MARS přes OLE DB Driver pro SQL Server a poté jsou vytvořeny dva objekty souboru záznamů, které se spustí se stejným spojením.

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

V předchozích verzích poskytovatele OLE DB tento kód způsoboval vytvoření implicitního spojení při druhém vykonání, protože na jedno spojení bylo možné otevřít pouze jednu aktivní sadu výsledků. Protože implicitní spojení nebylo ve skupině spojení OLE DB, toto chování způsobovalo dodatečnou režii. Díky funkci MARS dostupné pomocí OLE DB Driver pro SQL Server získáte více aktivních výsledků na jednom připojení.

Viz také

Vytváření aplikací pomocí ovladače OLE DB pro SQL Server