Partilhar via


Executando consultas SQL (classes gerenciadas SQLXML)

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

Este exemplo demonstra:

  • Criação de parâmetros (objetos SqlXmlParameter).

  • Atribuição de valores às propriedades (Nome e Valor) dos objetos SqlXmlParameter.

Neste exemplo, é executada uma consulta SQL simples para recuperar o nome, apelido e data de nascimento do colaborador cujo valor de apelido é passado como parâmetro. Ao especificar o parâmetro (ApelidoNome), apenas a propriedade Valor é definida. A propriedade Nome não está definida, porque nesta consulta o parâmetro é posicional e não é necessário nome.

A propriedade CommandType do objeto SqlXmlCommand, por defeito, é Sql. Portanto, a propriedade não é explicitamente definida.

Observação

No código, deve fornecer o nome da instância do Microsoft SQL Server na cadeia de ligação.

Este é o código 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 testar a aplicação

  1. Guarde o código C# (DocSample.cs) fornecido neste tópico numa pasta.

  2. Compila o código. Para compilar o código no prompt de comandos, use:

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

    Isto cria um executável (DocSample.exe).

  3. No prompt de comandos, execute DocSample.exe.

Para testar este exemplo, deve ter o Microsoft .NET Framework instalado no seu computador.

Em vez de especificar consultas SQL como texto de comando, pode especificar um modelo (como mostrado no fragmento de código seguinte) que executa um updategram (que também é um modelo) para inserir um registo de cliente. Podes especificar modelos e updategrams em ficheiros e executar ficheiros. Para mais informações, consulte Executar ficheiros de modelo usando a propriedade 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;  

Usando o ExecuteToStream

Se tiver um stream existente, pode usar o método ExecuteToStream em vez de criar um objeto Stream e usar o método Executar. O código do exemplo anterior é revisto aqui para usar o 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;  
   }  
}  

Observação

Também pode usar o método ExecuteXMLReadermethod que devolve um objeto XmlReader. Para mais informações, consulte Executando Consultas SQL Usando o Método ExecuteXMLReader.