Compartir a través de


Ejecutar consultas SQL (clases administradas de SQLXML)

Este ejemplo explica cómo:

  • Crear parámetros (objetosSqlXmlParameter).

  • Asignar valores a las propiedades (Name y Value) de los objetos SqlXmlParameter.

En este ejemplo se ejecuta una consulta SQL simple para recuperar el nombre, apellido y fecha de nacimiento del empleado cuyo valor de apellido se pasa como parámetro. Al especificar el parámetro (LastName), sólo se establece la propiedad Value. No se establece la propiedad Name, porque en esta consulta el parámetro es posicional y no se requiere ningún nombre.

La propiedad CommandType del objeto SqlXmlCommand tiene el valor predeterminado Sql. Por tanto, la propiedad no se establece de forma explícita.

[!NOTA]

En el código, debe proporcionar el nombre de la instancia de Microsoft SQL Server en la cadena de conexión.

Éste es el código de 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;
}
}

Para probar la aplicación

  1. Guarde en una carpeta el código de C# (DocSample.cs) que se proporciona en este tema.

  2. Compile el código. Para compilar el código en el símbolo del sistema, use:

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

    Esto crea una aplicación ejecutable (DocSample.exe).

  3. En el símbolo del sistema, ejecute DocSample.exe.

En lugar de especificar consultas SQL como texto de comando, puede especificar una plantilla (como se muestra en el siguiente fragmento de código) que ejecute un diagrama de actualización (que también es una plantilla) para insertar un registro del cliente. Puede especificar plantillas y diagramas de actualización en archivos y ejecutar los archivos. Para obtener más información, vea Ejecutar archivos de plantilla utilizando la propiedad 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;

Usar ExecuteToStream

Si tiene una secuencia existente, puede utilizar el método ExecuteToStream en lugar de crear un objeto Stream y utilizar el método Execute. El código del ejemplo anterior se revisa aquí para utilizar el método 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]

También puede utilizar el método ExecuteXMLReaderque devuelve un objeto XmlReader. Para obtener más información, vea Ejecutar consultas SQL mediante el método ExecuteXMLReader.