Použití ADO s SQL Server Native Client

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Important

SQL Server Native Client (SNAC) není dodáván s:

  • SQL Server 2022 (16.x) a novější verze
  • SQL Server Management Studio 19 a novější verze

Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).

Pro nové projekty použijte jeden z následujících ovladačů:

Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.

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), oznámení o dotazech, uživatelsky definované typy (UDT) nebo nový typ dat xml, měly by stávající aplikace využívající ActiveX Data Objects (ADO) využívat poskytovatele SQL Server Native Client OLE DB jako poskytovatele přístupu k datům.

Pokud nemusíte používat žádné z nových funkcí představených v SQL Server 2005 (9.x), není nutné používat poskytovatele SQL Server Native Client OLE DB; můžete pokračovat ve využívání svého současného poskytovatele přístupu k datům, kterým je obvykle SQLOLEDB. Pokud vylepšujete stávající aplikaci a potřebujete využít nové funkce představené v SQL Server 2005 (9.x), měli byste použít poskytovatele SQL Server Native Client OLE DB.

Note

Pokud vyvíjíte novou aplikaci, doporučuje se zvážit použití ADO.NET a .NET Framework Zprostředkovatel dat for SQL Server místo SQL Server Native Client pro přístup ke všem novým funkcím novějších verzí SQL Server. Pro více informací o .NET Framework Zprostředkovatel dat for SQL Server viz dokumentaci .NET Framework SDK pro ADO.NET.

Aby bylo možné ADO využívat nové funkce novějších verzí SQL Server, byly provedeny některé vylepšení poskytovatele SQL Server Native Client OLE DB, která rozšiřují 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. SQL Server Native Client přidává inicializační vlastnost SSPROP_INIT_DATATYPECOMPATIBILITY do sady DBPROPSET_SQLSERVERDBINIT pro použití ADO aplikacemi, aby nové datové typy byly vystaveny způsobem kompatibilním s ADO. Kromě toho poskytovatel SQL Server Native Client OLE DB také definuje nové klíčové slovo připojovací řetězec s názvem DataTypeCompatibility (Kompatibilita), které je nastaveno v připojovací řetězec.

Note

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 poskytovatele SQL Server Native Client OLE DB (SQLNCLI11) 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.

Zapnutí SQL Server Native Client z ADO

Aby bylo možné používat nativního klienta SQL Server, budou ADO aplikace muset implementovat následující klíčová slova ve svých spojovacích řetězcích:

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

Pro více informací o klíčových slovech ADO connections string podporovaných v SQL Server Native Client viz Použití klíčových slov connection string s SQL Server Native Client.

Následuje příklad nastavení ADO připojovací řetězec, který je plně povolen pro práci s SQL Server Native Client, včetně povolení funkce MARS:

Dim con As New ADODB.Connection  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "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 poskytovatelem SQL Server Native Client OLE DB.

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=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

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

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

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=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  

Zapnutí a využití MARS

V tomto příkladu je připojovací řetězec vytvořen tak, aby umožnil MARS prostřednictvím poskytovatele SQL Server Native Client OLE DB, a poté jsou vytvořeny dva objekty souboru záznamů pro spuštění se stejným spojením.

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  

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 zařazeno do poolu spojení OLE DB, způsobilo to další režii. S funkcí MARS, kterou poskytuje poskytovatel SQL Server Native Client OLE DB, získáte více aktivních výsledků na jednom připojení.