Ejecutar consultas SQL (clases administradas de SQLXML)
Se aplica a: SQL ServerAzure SQL Database
En este ejemplo se muestra lo siguiente:
Crear parámetros (objetos SqlXmlParameter).
Asignar valores a las propiedades (Nombre y Valor) de 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), solo se establece la propiedad Value. La propiedad Name no está establecida, porque en esta consulta el parámetro es posicional y no se requiere ningún nombre.
La propiedad CommandType del objeto SqlXmlCommand de forma predeterminada es 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 el 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
Guarde en una carpeta el código de C# (DocSample.cs) que se proporciona en este tema.
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.
Para probar este ejemplo, debe tener microsoft .NET Framework instalado en el equipo.
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 mediante 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 usar el método ExecuteToStream en lugar de crear un objeto Stream y usar el método Execute. El código del ejemplo anterior se revisa aquí para usar 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 usar el método ExecuteXMLReader que devuelve un objeto XmlReader. Para obtener más información, vea Ejecutar consultas SQL mediante el método ExecuteXMLReader.