Köra SQL-frågor (SQLXML Managed Classes)

gäller för:SQL ServerAzure SQL Database

Det här exemplet visar:

  • Skapar parametrar (SqlXmlParameter-objekt).

  • Tilldela värden till egenskaperna (Namn och Värde) för SqlXmlParameter-objekt.

I detta exempel utförs en enkel SQL-fråga för att hämta förnamn, efternamn och födelsedatum för den anställde vars efternamnsvärde skickas som parameter. Vid specificering av parametern (LastName) sätts endast egenskapen Value. Namnegenskapen är inte satt, eftersom parametern i denna fråga är positionsbestämd och inget namn krävs.

Egenskapen CommandType för SqlXmlCommand-objektet är som standard Sql. Därför är egenskapen inte explicit satt.

Anmärkning

I koden måste du ange namnet på instansen av Microsoft SQL Server i anslutningssträngen.

Detta är C#-koden:

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

Testa programmet

  1. Spara C#-koden (DocSample.cs) som ges i detta ämne i en mapp.

  2. Komplisera koden. För att kompilera koden i kommandoprompten, använd:

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

    Detta skapar en exekverbar fil (DocSample.exe).

  3. Vid kommandoprompten, utför DocSample.exe.

För att testa detta exempel måste du ha Microsoft .NET Framework installerat på din dator.

Istället för att ange SQL-frågor som kommandotext kan du ange en mall (som visas i följande kodfragment) som kör ett updategram (som också är en mall) för att infoga en kundpost. Du kan specificera mallar och updategrams i filer och köra filer. För mer information, se Exekvering av mallfiler genom att använda egenskapen 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;  

Att använda ExecuteToStream

Om du har en befintlig ström kan du använda metoden ExecuteToStream istället för att skapa ett Stream-objekt och använda metoden Exekut. Koden från föregående exempel revideras här för att använda ExecuteToStream-metoden:

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

Anmärkning

Du kan också använda ExecuteXMLReadermethod som returnerar ett XmlReader-objekt. För mer information, se Körning av SQL-frågor med hjälp av ExecuteXMLReader-metoden.