Freigeben über


Verwenden von ADO mit SQL Server Native Client

Um neue Features zu nutzen, die in SQL Server 2005 eingeführt wurden, z. B. mehrere aktive Resultsets (MARS), Abfragebenachrichtigungen, benutzerdefinierte Typen (UDTs) oder den neuen XML-Datentyp , sollten vorhandene Anwendungen, die ActiveX Data Objects (ADO) verwenden, den SQL Server Native Client OLE DB-Anbieter als Datenzugriffsanbieter verwenden.

Wenn Sie keine der neuen Features verwenden müssen, die in SQL Server 2005 eingeführt wurden, ist es nicht erforderlich, den OLE DB-Anbieter für SQL Server Native Client zu verwenden; Sie können weiterhin Ihren aktuellen Datenzugriffsanbieter verwenden, der in der Regel SQLOLEDB ist. Wenn Sie eine vorhandene Anwendung verbessern und die neuen Features verwenden müssen, die in SQL Server 2005 eingeführt wurden, sollten Sie den OLE DB-Anbieter von SQL Server Native Client verwenden.

Hinweis

Wenn Sie eine neue Anwendung entwickeln, empfiehlt es sich, ADO.NET und den .NET Framework-Datenanbieter für SQL Server anstelle von SQL Server Native Client zu verwenden, um auf alle neuen Features neuer Versionen von SQL Server zuzugreifen. Weitere Informationen zum .NET Framework-Datenanbieter für SQL Server finden Sie in der .NET Framework SDK-Dokumentation für ADO.NET.

Damit ADO neue Features neuer Versionen von SQL Server verwenden kann, wurden einige Verbesserungen am OLE DB-Anbieter von SQL Server Native Client vorgenommen, der die Kernfunktionen von OLE DB erweitert. Diese Verbesserungen ermöglichen es ADO-Anwendungen, neuere SQL Server-Features zu verwenden und zwei datentypen zu nutzen, die in SQL Server 2005 eingeführt wurden: xml und udt. Diese Verbesserungen nutzen auch Verbesserungen an den Datentypen varchar, nvarchar und varbinary . SQL Server Native Client fügt die SSPROP_INIT_DATATYPECOMPATIBILITY Initialisierungseigenschaft zum DBPROPSET_SQLSERVERDBINIT Eigenschaftensatz für die Verwendung durch ADO-Anwendungen hinzu, sodass die neuen Datentypen auf eine Weise verfügbar gemacht werden, die mit ADO kompatibel ist. Darüber hinaus definiert der OLE DB-Anbieter von SQL Server Native Client auch ein neues Verbindungszeichenfolgen-Schlüsselwort DataTypeCompatibility , das in der Verbindungszeichenfolge festgelegt ist.

Hinweis

Vorhandene ADO-Anwendungen können mithilfe des SQLOLEDB-Anbieters auf XML, UDT und Werte für große Werte mit großem Wert und binären Feldern zugreifen und diese aktualisieren. Die neuen größeren Datentypen varchar(max), nvarchar(max) und varbinary(max) werden als ADO-Typen "adLongVarChar", "adLongVarWChar " bzw. "adLongVarBinary " zurückgegeben. XML-Spalten werden als adLongVarChar zurückgegeben, und UDT-Spalten werden als adVarBinary zurückgegeben. Wenn Sie jedoch den OLE DB-Anbieter (SQLNCLI11) von SQL Server native Client anstelle von SQLOLEDB verwenden, müssen Sie sicherstellen, dass das DataTypeCompatibility Schlüsselwort auf "80" festgelegt wird, damit die neuen Datentypen den ADO-Datentypen ordnungsgemäß zugeordnet werden.

Aktivieren des nativen SQL Server-Clients aus ADO

Um die Verwendung von SQL Server Native Client zu ermöglichen, müssen ADO-Anwendungen die folgenden Schlüsselwörter in ihren Verbindungszeichenfolgen implementieren:

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

Weitere Informationen zu den ADO-Verbindungszeichenfolgenstichwörtern, die in SQL Server Native Client unterstützt werden, finden Sie unter Verwenden von Verbindungszeichenfolgenstichwörtern mit SQL Server Native Client.

Im Folgenden finden Sie ein Beispiel für das Einrichten einer ADO-Verbindungszeichenfolge, die vollständig für die Arbeit mit SQL Server Native Client aktiviert ist, einschließlich der Aktivierung des MARS-Features:

Dim con As New ADODB.Connection  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _  
         & "DataTypeCompatibility=80;" _  
         & "MARS Connection=True;"  
con.Open  

Beispiele

Die folgenden Abschnitte enthalten Beispiele für die Verwendung von ADO mit dem OLE DB-Anbieter für SQL Server Native Client.

Abrufen von XML-Spaltendaten

In diesem Beispiel wird ein Recordset verwendet, um die Daten aus einer XML-Spalte in der SQL Server AdventureWorks-Beispieldatenbank abzurufen und anzuzeigen.

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  

Hinweis

Die Recordsetfilterung wird bei XML-Spalten nicht unterstützt. Bei Verwendung wird ein Fehler zurückgegeben.

Abrufen von UDT-Spaltendaten

In diesem Beispiel wird ein Command-Objekt verwendet, um eine SQL-Abfrage auszuführen, die ein UDT zurückgibt, die UDT-Daten aktualisiert werden und dann die neuen Daten wieder in die Datenbank eingefügt werden. In diesem Beispiel wird davon ausgegangen, dass der Point UDT bereits in der Datenbank registriert wurde.

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  

Aktivieren und Verwenden von MARS

In diesem Beispiel wird die Verbindungszeichenfolge erstellt, um MARS über den SQL Server Native Client OLE DB-Anbieter zu aktivieren, und dann werden zwei Recordsetobjekte erstellt, die mit derselben Verbindung ausgeführt werden.

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  

In früheren Versionen des OLE DB-Anbieters würde dieser Code dazu führen, dass für die zweite Ausführung eine implizite Verbindung erstellt wird, da nur eine aktive Gruppe von Ergebnissen pro einzelne Verbindung geöffnet werden konnte. Da die implizite Verbindung nicht im OLE DB-Verbindungspool zusammengefasst wurde, würde dies zu zusätzlichem Aufwand führen. Mit dem MARS-Feature, das vom SQL Server Native Client OLE DB-Anbieter verfügbar gemacht wird, erhalten Sie mehrere aktive Ergebnisse für die eine Verbindung.

Siehe auch

Erstellen von Anwendungen mit SQL Server Native Client