Freigeben über


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

Gilt für: SQL Server Azure SQL-Datenbank

In diesem Beispiel wird veranschaulicht:

  • Erstellen von Parametern (SqlXmlParameter-Objekte).

  • Zuweisen von Werten zu den Eigenschaften (Name und Wert) 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. Beim Angeben des Parameters (LastName) wird nur die Value-Eigenschaft festgelegt. Die Name-Eigenschaft ist nicht festgelegt, da in dieser Abfrage der Parameter positional ist und kein Name erforderlich ist.

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

Hinweis

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

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.

Zum Testen dieses Beispiels müssen Sie microsoft .NET Framework auf Ihrem Computer installiert haben.

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 mithilfe 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

Wenn Sie über einen vorhandenen Datenstrom verfügen, können Sie die ExecuteToStream-Methode verwenden, anstatt ein Stream-Objekt zu erstellen und die Execute-Methode zu verwenden. Der Code aus dem vorherigen 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;  
   }  
}  

Hinweis

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