Condividi tramite


Esecuzione di query SQL (classi gestite SQLXML)

In questo esempio vengono illustrate le operazioni seguenti:

  • Creazione di parametri (oggettiSqlXmlParameter).

  • Assegnazione di valori alle proprietà (Name e Value) di oggetti SqlXmlParameter.

In questo esempio viene eseguita una query SQL semplice per recuperare il nome, il cognome e la data di nascita del dipendente il cui valore di cognome viene passato come parametro. Nello specificare il parametro (LastName), viene impostata solo la proprietà Value. La proprietà Name non viene impostata, perché in questa query il parametro è basato sulla posizione e non è necessario alcun nome.

La proprietà CommandType dell'oggetto SqlXmlCommand è Sql per impostazione predefinita. La proprietà, pertanto, non viene impostata in modo esplicito.

[!NOTA]

Nel codice è necessario specificare il nome dell'istanza di Microsoft SQL Server nella stringa di connessione.

Di seguito viene fornito il codice 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;
}
}

Per testare l'applicazione

  1. Salvare in una cartella il codice C# (DocSample.cs) fornito in questo argomento.

  2. Compilare il codice. Per compilare il codice nel prompt dei comandi, utilizzare:

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

    Verrà creato un file eseguibile (DocSample.exe).

  3. Al prompt dei comandi eseguire DocSample.exe.

Anziché specificare query SQL come testo del comando, è possibile specificare un modello, come illustrato nel frammento di codice seguente, che esegua un updategram (che è anche un modello) per inserire un record del consumer. È possibile specificare modelli e updategram in file e file di esecuzione. Per ulteriori informazioni, vedere Esecuzione di file modello mediante la proprietà 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;

Utilizzo di ExecuteToStream

Se si dispone di un flusso esistente, è possibile utilizzare il metodo ExecuteToStream anziché creare un oggetto Stream e utilizzare il metodo Execute. Il codice dall'esempio precedente è stato modificato per utilizzare il metodo ExecuteToStream:

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

[!NOTA]

È inoltre possibile utilizzare il metodoExecuteXMLReader,che restituisce un oggetto XmlReader. Per ulteriori informazioni, vedere Esecuzione di query SQL tramite il metodo ExecuteXMLReader.