Exécution de requêtes SQL (classes managées SQLXML)

Cet exemple illustre les thèmes suivants :

  • Création de paramètres (objetsSqlXmlParameter).

  • Affectation de valeurs aux propriétés (Name et Value) des objets SqlXmlParameter.

Dans cet exemple, une simple requête SQL est exécutée dans le but d'extraire le prénom, le nom et la date de naissance de l'employé dont la valeur désignant le nom est passée en tant que paramètre. Lorsque vous définissez le paramètre LastName, seule la propriété Value est définie. La propriété Name n'est pas définie puisque, dans cette requête, le paramètre est positionnel et aucun nom n'est requis.

Par défaut, la propriété CommandType de l'objet SqlXmlCommand est Sql. Par conséquent, la propriété n'est pas explicitement définie.

Notes

Dans le code, vous devez fournir le nom de l'instance de Microsoft SQL Server dans la chaîne de connexion.

Voici le code C# :

using System;

using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
      static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks2008R2;Integrated Security=SSPI";
      public static int testParams()
      {
         Stream strm;
         SqlXmlParameter p;
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);      
         cmd.CommandText = "SELECT FirstName, LastName FROM Person.Person WHERE LastName=? For XML Auto";
         p = cmd.CreateParameter();
         p.Value = "Achong";
         string strResult;
         try 
         {
            strm = cmd.ExecuteStream();
            strm.Position = 0;
            using(StreamReader sr = new StreamReader(strm))
            {
               Console.WriteLine(sr.ReadToEnd());
            }
         }
         catch (SqlXmlException e)
         {
            //in case of an error, this prints error returned.
            e.ErrorStream.Position=0;
            strResult=new StreamReader(e.ErrorStream).ReadToEnd();
            System.Console.WriteLine(strResult);
         }
         
         return 0;
   }
public static int Main(String[] args)
{
    testParams();
    return 0;
}
}

Pour tester l'application

  1. Vérifiez que Microsoft .NET Framework est installé sur votre ordinateur. Il est obligatoire pour tester cet exemple.

  2. Enregistrez dans un dossier le code C# (DocSample.cs) fourni dans cette rubrique.

  3. Compilez le code. Pour compiler le code à l'invite de commandes, utilisez :

    csc /reference:Microsoft.Data.SqlXML.dll DocSample.cs
    

    Un fichier exécutable (DocSample.exe) est alors créé.

  4. À l'invite de commandes, exécutez DocSample.exe.

Au lieu de spécifier des requêtes SQL en tant que texte de commande, vous pouvez spécifier un modèle (comme présenté dans le fragment de code ci-après) qui exécute un code de mise à jour (ou « updagegram », lequel est également un modèle) afin d'insérer un enregistrement de client. Vous pouvez spécifier des modèles et des codes de mise à jour dans les fichiers et exécuter des fichiers. Pour plus d'informations, consultez Exécution de fichiers modèles à l'aide de la propriété CommandText.

   SqlXmlCommand cmd = new SqlXmlCommand("Provider=SQLOLEDB;Data Source=SqlServerName;Initial Catalog=Database; Integrated Security=SSPI;");
   Stream stm;
   cmd.CommandType = SqlXmlCommandType.UpdateGram;
   cmd.CommandText = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql' xmlns:updg='urn:schemas-microsoft-com:xml-updategram'>" +
         "<updg:sync>" +
          "<updg:before/>" +
          "<updg:after>" +
            "<Customer CustomerID='aaaaa' CustomerName='Some Name' CustomerTitle='SomeTitle' />" +
          "</updg:after>" +
          "</updg:sync>" +
          "</ROOT>";

   stm = cmd.ExecuteStream();
   stm = null;
   cmd = null;

Utilisation de la méthode ExecuteToStream

Si vous disposez d'un flux existant, vous pouvez faire appel à la méthode ExecuteToStream au lieu de créer un objet Stream à l'aide de la méthode Execute. Le code de l'exemple précédent a été modifié ici dans le but d'utiliser la méthode ExecuteToStream :

using System;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
   static string ConnString = "Provider=SQLOLEDB;Server=SqlServerName;database=AdventureWorks2008R2;Integrated Security=SSPI;";
   public static int testParams()
   {
      SqlXmlParameter p;
      MemoryStream ms = new MemoryStream();
      StreamReader sr = new StreamReader(ms);
      ms.Position = 0;
      SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
      cmd.CommandText = "select FirstName, LastName from Person.Person where LastName = ? For XML Auto";
      p = cmd.CreateParameter();
      p.Value = "Achong";
      cmd.ExecuteToStream(ms);
      ms.Position = 0;
      Console.WriteLine(sr.ReadToEnd());
      return 0;      
   }
   public static int Main(String[] args)
   {
      testParams();   
      return 0;
   }
}

Notes

Vous pouvez également utiliser la méthode ExecuteXMLReader qui permet de retourner un objet XmlReader. Pour plus d'informations, consultez Exécution de requêtes SQL à l'aide de la méthode ExecuteXMLReader.