Ejecutar archivos de plantilla utilizando la propiedad CommandText
Se aplica a: SQL ServerAzure SQL Database
En este ejemplo se muestra cómo se pueden especificar los archivos de plantilla que constan de consultas SQL o XPath mediante la propiedad CommandText. En lugar de especificar la consulta SQL o XPath como 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 el 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
Asegúrese de que tiene instalado Microsoft .NET Framework en el equipo.
Guarde la plantilla XML (TemplateFile.xml) que se proporciona en este ejemplo en una carpeta.
Guarde el código de C# (DocSample.cs) que se proporciona en este ejemplo en la misma carpeta en la que se almacena 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).
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).
En el símbolo del sistema, ejecute DocSample.exe.
Si pasa un parámetro a una plantilla, el nombre del parámetro debe comenzar con el signo (@); 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;
}