Utilisation d'ADO avec SQL Server Native Client

 

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

Si vous n'avez pas besoin d'utiliser ces 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 en général 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.

System_CAPS_ICON_note.jpg Remarque


Si vous développez une nouvelle application, il est recommandé d'envisager l'utilisation d'ADO.NET et du fournisseur de données .NET Framework pour SQL Server au lieu de SQL Server Native Client afin d'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 les nouvelles fonctionnalités des récentes versions de SQL Server, certaines améliorations ont été apportées au fournisseur OLE DB SQL Server Native Client afin d'étendre les fonctionnalités principales d'OLE DB. Ces améliorations permettent aux applications ADO d’utiliser plus récente SQL Server fonctionnalités et d’utiliser deux types de données introduits dans SQL Server 2005: xml et udt. Ces améliorations exploitent également des améliorations apportées à la varchar, nvarchar, et varbinary des types de données. SQL ServerNative Client ajoute la propriété d’initialisation SSPROP_INIT_DATATYPECOMPATIBILITY à la propriété DBPROPSET_SQLSERVERDBINIT définie pour une utilisation par les applications ADO afin que les nouveaux types de données sont exposées de manière compatible avec ADO. En outre, les SQL Server fournisseur de OLE DB Native Client définit également un nouveau mot-clé de chaîne de connexion nommé DataTypeCompatibility qui est définie dans la chaîne de connexion.

System_CAPS_ICON_note.jpg Remarque


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

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

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

Pour plus d’informations sur l’objet ADO de chaîne de connexion mots clés pris en charge dans SQL Server Native Client, consultez à l’aide 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 qui est entièrement compatible avec SQL Server Native Client, y compris 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  

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

Extraction de données de colonnes XML

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

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  

System_CAPS_ICON_note.jpg Remarque


Le filtrage de jeu d'enregistrements n'est pas pris en charge avec les colonnes XML. S'il est utilisé, une erreur est retournée.

Extraction de données de colonnes UDT

Dans cet exemple, un commande objet est utilisé pour exécuter une requête SQL qui retourne un type UDT, les données de l’UDT sont mis à jour, puis les nouvelles données sont réinsérées dans la base de données. Cet exemple suppose que la Point UDT a déjà été enregistré 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 par le biais du SQL Server Client fournisseur OLE DB natif et puis deux objets recordset sont créés pour l’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 provoquait la création d'une connexion implicite lors de la deuxième exécution car un seul jeu de résultats actif par connexion pouvait être ouvert. La connexion implicite n'étant pas mise dans le pool de connexions OLE DB, cela provoquait une charge supplémentaire. Avec la fonctionnalité MARS exposée par le SQL Server fournisseur OLE DB Native Client, vous obtenez des résultats actifs multiples sur une connexion.

Création d’Applications avec SQL Server Native Client

Ajouts de la communauté

Afficher: