Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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=SQLNCLI11DataTypeCompatibility=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.