Share via


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

S’applique à :SQL ServerAzure SQL Database

Cet exemple illustre :

  • Création de paramètres (objets SqlXmlParameter).

  • 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. Lors de la spécification du paramètre (LastName), seule la propriété Value est définie. La propriété Name n’est pas définie, car dans cette requête, le paramètre est positionnel et aucun nom n’est requis.

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

Notes

Dans le code, vous devez fournir le nom du 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=AdventureWorks;Integrated Security=SSPI";  
      public static int testParams()  
      {  
         Stream strm;  
         SqlXmlParameter p;  
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);        
         cmd.CommandText = "SELECT FirstName, LastName FROM Person.Contact 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. Enregistrez dans un dossier le code C# (DocSample.cs) fourni dans cette rubrique.

  2. 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éé.

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

Pour tester cet exemple, vous devez avoir installé Microsoft .NET Framework sur votre ordinateur.

Au lieu de spécifier des requêtes SQL en tant que texte de commande, vous pouvez spécifier un modèle (comme illustré dans le fragment de code ci-après) qui exécute un code de mise à jour (ou « updategram », 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 de modèle à 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 utiliser la méthode ExecuteToStream au lieu de créer un objet Stream et d’utiliser la méthode Execute. Le code de l’exemple précédent est révisé ici pour utiliser la méthode ExecuteToStream :

using System;  
using Microsoft.Data.SqlXml;  
using System.IO;  
class Test  
{  
   static string ConnString = "Provider=SQLOLEDB;Server=SqlServerName;database=AdventureWorks;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.Contact 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 l’objet ExecuteXMLReadermethod qui retourne un objet XmlReader. Pour plus d’informations, consultez Exécution de requêtes SQL à l’aide de la méthode ExecuteXMLReader.