Udostępnij przez


Wykonywanie kwerendy SQL (klasy Managed SQLXML)

W poniższym przykładzie zademonstrowano:

  • Tworzenie parametrów)SqlXmlParameter obiekty).

  • Przypisywanie wartości do właściwości (Name i Value) z SqlXmlParameter obiekty.

W tym przykładzie prostych kwerend SQL jest wykonywany w celu pobrania imię, nazwisko i Data urodzenia pracownika, którego ostatnia wartość nazwy jest przekazywana jako parametr.Określając (parametrLastName), tylko Value Właściwość jest zestaw. The Name właściwość is not zestaw, because in this query the parameter is positional and no name is required.

The CommandType właściwość of the SqlXmlCommand object by default is Sql.Dlatego właściwość nie jest jawnie ustawiony.

Uwaga

W kodzie musisz podać nazwę wystąpienie programu Microsoft SQL Server w ciąg połączenia.

Jest to kod 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;
}
}

Aby przetestować aplikację

  1. Zapisz C# kodzie (DocSample.cs) w tym temacie w folderze.

  2. Skompiluj kod.Aby skompilować kod w wiersz polecenia, należy użyć:

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

    Spowoduje to utworzenie pliku wykonywalnego (DocSample.exe).

  3. W wiersz polecenia należy wykonać DocSample.exe.

Zamiast określać kwerendy SQL jako tekst polecenia, można określić szablon (jak pokazano w następującym fragmencie kodu) wykonujący updategram (która jest również szablon) do wstawienia rekordu klienta.Można określić w plikach szablonów i updategrams i wykonywania plików.Aby uzyskać więcej informacji zobaczWykonywanie za pomocą właściwość CommandText pliki szablonów.

   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;

Za pomocą ExecuteToStream

Jeśli masz istniejący strumień, możesz użyć ExecuteToStream metody tworzenia Stream obiekt i za pomocą Execute Metoda. Ten kod z poprzedniego przykładu jest tutaj przeprowadzono w celu używania ExecuteToStream Metoda:

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

Uwaga

You can also use the ExecuteXMLReadermethod that returns an XmlReader object.Aby uzyskać więcej informacji zobaczWykonywanie kwerendy SQL przy użyciu metoda ExecuteXMLReader.