Freigeben über


Ausführen von SQL-Abfragen (verwaltete SQLXML-Klassen)

In diesem Beispiel wird Folgendes veranschaulicht:

  • Das Erstellen von Parametern (SqlXmlParameter-Objekte).

  • Das Zuweisen von Werten zu Eigenschaften (Name und Value) von SqlXmlParameter-Objekten.

In diesem Beispiel wird eine einfache SQL-Abfrage ausgeführt, um Vornamen, Nachnamen und Geburtsdatum des Mitarbeiters abzufragen, dessen Nachname als Parameterwert übergeben wird. Durch Angeben des Parameters (LastName) wird nur die Value-Eigenschaft festgelegt. Die Name-Eigenschaft wird nicht festgelegt, da es sich in dieser Abfrage um einen Positionsparameter handelt und kein Name erforderlich ist.

Die CommandType-Eigenschaft des SqlXmlCommand-Objekts ist standardmäßig Sql. Deshalb wird die Eigenschaft nicht explizit festgelegt.

HinweisHinweis

Im Code müssen Sie den Namen der Instanz von Microsoft SQL Server in der Verbindungszeichenfolge bereitstellen.

Dies ist der 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;
}
}

So testen Sie die Anwendung

  1. Speichern Sie den in diesem Thema bereitgestellten C#-Code (DocSample.cs) in einem Ordner.

  2. Kompilieren Sie den Code. Verwenden Sie zur Kompilierung des Codes an der Eingabeaufforderung die folgende Zeichenfolge:

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

    Dadurch wird eine ausführbare Datei (DocSample.exe) erstellt.

  3. Führen Sie DocSample.exe an der Eingabeaufforderung aus.

Statt die SQL-Abfragen als Befehlstext anzugeben, können Sie eine Vorlage festlegen (wie im folgenden Codefragment dargestellt), die ein Updategram ausführt (ebenfalls eine Vorlage), um einen Kundendatensatz einzufügen. Sie können Vorlagen und Updategrams in Dateien angeben und Dateien ausführen. Weitere Informationen finden Sie unter Ausführen von Vorlagendateien mit der 'CommandText'-Eigenschaft.

   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;

Verwenden von ExecuteToStream

Falls ein Stream vorhanden ist, können Sie die ExecuteToStream-Methode verwenden, statt ein Stream-Objekt zu erstellen und die Execute-Methode anzuwenden. Der Code für das vorhergehende Beispiel wird hier überarbeitet, um die ExecuteToStream-Methode zu verwenden:

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

Sie können auch die ExecuteXMLReader-Methode verwenden, die ein XmlReader-Objekt zurückgibt. Weitere Informationen finden Sie unter Ausführen von SQL-Abfragen mithilfe der 'ExecuteXMLReader'-Methode.