Delen via


SQL-query's uitvoeren (beheerde SQLXML-klassen)

Van toepassing op:SQL ServerAzure SQL Database

In dit voorbeeld ziet u het volgende:

  • Parameters aanmaken (SqlXmlParameter-objecten).

  • Waarden toewijzen aan de eigenschappen (Naam en Waarde) van SqlXmlParameter-objecten.

In dit voorbeeld wordt een eenvoudige SQL-query uitgevoerd om de voornaam, achternaam en geboortedatum van de werknemer wiens achternaamwaarde als parameter wordt doorgegeven, terug te halen. Bij het specificeren van de parameter (Achternaam) wordt alleen de eigenschap Value ingesteld. De eigenschap Naam is niet ingesteld, omdat in deze query de parameter positioneel is en geen naam nodig is.

De CommandType-eigenschap van het SqlXmlCommand-object is standaard SQL. Daarom is de eigenschap niet expliciet vastgesteld.

Opmerking

In de code moet je de naam van de instantie van Microsoft SQL Server in de verbindingsstring opgeven.

Dit is de C#-code:

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;  
}  
}  

De toepassing testen

  1. Sla de C#-code (DocSample.cs) die in dit onderwerp wordt vermeld op in een map.

  2. Compileer de code. Om de code in de opdrachtprompt te compileren, gebruik u:

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

    Dit creëert een uitvoerbaar bestand (DocSample.exe).

  3. Voer bij de opdrachtprompt DocSample.exeuit.

Om dit voorbeeld te testen, moet je het Microsoft .NET Framework op je computer hebben geïnstalleerd.

In plaats van SQL-queries als commandotekst te specificeren, kun je een sjabloon specificeren (zoals getoond in het volgende codefragment) dat een updategram uitvoert (dat ook een sjabloon is) om een klantrecord in te voegen. Je kunt sjablonen en updategrams specificeren in bestanden en bestanden uitvoeren. Voor meer informatie, zie Uitvoeren van sjabloonbestanden door de CommandText-eigenschap te gebruiken.

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;  

Gebruik van ExecuteToStream

Als je een bestaande stream hebt, kun je de ExecuteToStream-methode gebruiken in plaats van een Stream-object te maken en de Execute-methode te gebruiken. De code uit het voorgaande voorbeeld is hier herzien om de ExecuteToStream-methode te gebruiken:

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;  
   }  
}  

Opmerking

Je kunt ook de ExecuteXMLReadermethod gebruiken die een XmlReader-object teruggeeft. Voor meer informatie, zie Uitvoeren van SQL-queries met behulp van de ExecuteXMLReader-methode.