Partager via


Utilisation d’ADO avec SQL Server Native Client

Pour tirer parti des nouvelles fonctionnalités introduites dans SQL Server 2005, telles que plusieurs jeux de résultats actifs (MARS), les notifications de requête, les types définis par l’utilisateur (UDT) ou le nouveau type de données xml , les applications existantes qui utilisent ActiveX Data Objects (ADO) doivent utiliser le fournisseur OLE DB SQL Server Native Client comme fournisseur d’accès aux données.

Si vous n’avez pas besoin d’utiliser les nouvelles fonctionnalités introduites dans SQL Server 2005, il n’est pas nécessaire d’utiliser le fournisseur OLE DB SQL Server Native Client ; vous pouvez continuer à utiliser votre fournisseur d’accès aux données actuel, qui est généralement SQLOLEDB. Si vous améliorez une application existante et que vous devez utiliser les nouvelles fonctionnalités introduites dans SQL Server 2005, vous devez utiliser le fournisseur OLE DB SQL Server Native Client.

Remarque

Si vous développez une nouvelle application, il est recommandé d’utiliser ADO.NET et le fournisseur de données .NET Framework pour SQL Server au lieu de SQL Server Native Client pour accéder à toutes les nouvelles fonctionnalités des versions récentes de SQL Server. Pour plus d’informations sur le fournisseur de données .NET Framework pour SQL Server, consultez la documentation du Kit de développement logiciel (SDK) .NET Framework pour ADO.NET.

Pour permettre à ADO d’utiliser de nouvelles fonctionnalités de versions récentes de SQL Server, certaines améliorations ont été apportées au fournisseur OLE DB SQL Server Native Client qui étend les principales fonctionnalités d’OLE DB. Ces améliorations permettent aux applications ADO d’utiliser des fonctionnalités SQL Server plus récentes et d’utiliser deux types de données introduits dans SQL Server 2005 : xml et udt. Ces améliorations exploitent également les améliorations apportées aux types de données varchar, nvarchar et varbinary . SQL Server Native Client ajoute la propriété d’initialisation SSPROP_INIT_DATATYPECOMPATIBILITY au jeu de propriétés DBPROPSET_SQLSERVERDBINIT pour une utilisation par les applications ADO afin que les nouveaux types de données soient exposés de manière compatible avec ADO. En outre, le fournisseur OLE DB SQL Server Native Client définit également un nouveau mot clé de chaîne de connexion nommé DataTypeCompatibility défini dans la chaîne de connexion.

Remarque

Les applications ADO existantes peuvent accéder et mettre à jour xml, UDT et des valeurs de texte de grande valeur et de champ binaire à l’aide du fournisseur SQLOLEDB. Les nouveaux types de données varchar(max), nvarchar(max)et varbinary(max) sont retournés en tant que types ADO adLongVarChar, adLongVarWChar et adLongVarBinary respectivement. Les colonnes XML sont retournées en tant que colonnes adLongVarChar et les colonnes UDT sont retournées en tant que adVarBinary. Toutefois, si vous utilisez le fournisseur OLE DB SQL Server Native Client (SQLNCLI11) au lieu de SQLOLEDB, vous devez vous assurer de définir le DataTypeCompatibility mot clé sur « 80 » afin que les nouveaux types de données correspondent correctement aux types de données ADO.

Activation de SQL Server Native Client à partir d’ADO

Pour activer l’utilisation de SQL Server Native Client, les applications ADO devront implémenter les mots clés suivants dans leurs chaînes de connexion :

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

Pour plus d’informations sur les mots clés de chaîne de connexions ADO pris en charge dans SQL Server Native Client, consultez Utilisation de mots clés de chaîne de connexion avec SQL Server Native Client.

Voici un exemple d’établissement d’une chaîne de connexion ADO entièrement activée pour fonctionner avec SQL Server Native Client, notamment l’activation de la fonctionnalité 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  

Exemples

Les sections suivantes fournissent des exemples d’utilisation d’ADO avec le fournisseur OLE DB SQL Server Native Client.

Récupération des données de colonne XML

Dans cet exemple, un recordset est utilisé pour récupérer et afficher les données d’une colonne XML dans l’exemple de base de données SQL Server AdventureWorks .

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  

Remarque

Le filtrage des jeux d’enregistrements n’est pas pris en charge avec les colonnes XML. Si elle est utilisée, une erreur est retournée.

Récupération des données de colonne UDT

Dans cet exemple, un objet Command est utilisé pour exécuter une requête SQL qui retourne un UDT, les données UDT sont mises à jour, puis les nouvelles données sont insérées dans la base de données. Cet exemple suppose que l’UDT point a déjà été inscrit dans la base de données.

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  

Activation et utilisation de MARS

Dans cet exemple, la chaîne de connexion est construite pour activer MARS via le fournisseur OLE DB SQL Server Native Client, puis deux objets recordset sont créés pour s’exécuter à l’aide de la même connexion.

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  

Dans les versions antérieures du fournisseur OLE DB, ce code entraîne la création d’une connexion implicite lors de la deuxième exécution, car un seul ensemble actif de résultats peut être ouvert par connexion unique. Étant donné que la connexion implicite n’a pas été mise en pool dans le pool de connexions OLE DB, cela entraînerait une surcharge supplémentaire. Avec la fonctionnalité MARS exposée par le fournisseur OLE DB SQL Server Native Client, vous obtenez plusieurs résultats actifs sur la connexion unique.

Voir aussi

Génération d’applications avec SQL Server Native Client