Compartir a través de


Ejecutar archivos de plantilla utilizando la propiedad CommandText

En este ejemplo se muestra cómo se pueden especificar los archivos de plantilla que están compuestos de consultas SQL o XPath utilizando la propiedad CommandText. En lugar de especificar la consulta SQL o XPath como el valor de CommandText, puede especificar un nombre de archivo como valor. En el ejemplo siguiente, la propiedad CommandType se especifica como SqlXmlCommandType.TemplateFile.

La aplicación de ejemplo ejecuta esta plantilla:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <sql:query>
    SELECT TOP 2 ContactID, FirstName, LastName 
    FROM   Person.Contact
    FOR XML AUTO
  </sql:query>
</ROOT>

Esta es la aplicación de ejemplo C#. Para probar la aplicación, guarde la plantilla (TemplateFile.xml) y, a continuación, ejecute la aplicación.

[!NOTA]

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

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;
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
         cmd.CommandType = SqlXmlCommandType.TemplateFile;
         cmd.CommandText = "TemplateFile.xml";
         using (Stream strm = cmd.ExecuteStream()){
            using (StreamReader sr = new StreamReader(strm)){
                Console.WriteLine(sr.ReadToEnd());
            }
         }

         return 0;      
      }
      public static int Main(String[] args)
      {
         testParams();   
         return 0;
      }
   }

Para probar la aplicación

  1. Asegúrese de que tiene Microsoft .NET Framework instalado en el equipo.

  2. Guarde la plantilla XML (TemplateFile.xml) que se proporciona en este ejemplo en una carpeta.

  3. Guarde el código C# (DocSample.cs) que se proporciona en este ejemplo en la misma carpeta en la que está almacenado el esquema. (Si almacena los archivos en otra carpeta, tendrá que modificar el código y especificar la ruta de acceso al directorio adecuada para el esquema de asignación).

  4. 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).

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

Si pasa un parámetro a una plantilla, el nombre de parámetro debe comenzar con arroba (@); por ejemplo, p.Name = "@ContactID", donde p es un objeto SqlXmlParameter.

Ésta es la plantilla actualizada que toma un parámetro.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <sql:header>
     <sql:param name='ContactID'>1</sql:param>  
  </sql:header>
  <sql:query>
    SELECT ContactID, FirstName, LastName
    FROM   Person.Contact
    WHERE  ContactID=@ContactID
    FOR XML AUTO
  </sql:query>
</ROOT>

Éste es el código actualizado en el que se pasa un parámetro para ejecutar la plantilla.

   public static int testParams()
   {

      Stream strm;
      SqlXmlParameter p;

      SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
      cmd.CommandType = SqlXmlCommandType.TemplateFile;
      cmd.CommandText = "TemplateFile.xml";
      p = cmd.CreateParameter();
      p.Name="@ContactID";
      p.Value = "1";
      strm = cmd.ExecuteStream();
      StreamReader sw = new StreamReader(strm);
      Console.WriteLine(sw.ReadToEnd());
      return 0;      
   }