Поделиться через


Выполнение запросов SQL (управляемые классы SQLXML)

Область применения: SQL Server База данных SQL Azure

В этом примере показано следующее.

  • Создание параметров (объекты SqlXmlParameter).

  • Назначение значений свойствам объектов SqlXmlParameter (Name и Value).

В этом примере выполняется простой SQL-запрос, который получает фамилию, имя и дату рождения сотрудника, чья фамилия передается в качестве параметра. При указании параметра (LastName) задано только свойство Value. Свойство Name не задано, так как в этом запросе параметр позициональный и имя не требуется.

Свойство CommandType объекта SqlXmlCommand по умолчанию — Sql. Поэтому ему явно не присваивается значение.

Примечание.

В коде необходимо указать имя экземпляра Microsoft SQL Server в строка подключения.

Далее приведен код 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;  
}  
}  

Тестирование приложения

  1. Сохраните код C# (DocSample.cs), представленный в этом разделе, в папке.

  2. Скомпилируйте код. Чтобы скомпилировать код из командной строки, введите следующую команду.

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

    Будет создан исполняемый файл (DocSample.exe).

  3. Запустите файл DocSample.exe из командной строки.

Чтобы протестировать этот пример, на компьютере должна быть установлена платформа .NET Framework Майкрософт.

Вместо указания запросов SQL в виде текста команды можно задать шаблон (как показано в следующем фрагменте кода), который выполняет диаграмму обновления (также шаблон) для вставки пользовательской записи. Можно задать шаблоны и диаграммы обновления в файлах и выполнить эти файлы. Дополнительные сведения см. в разделе "Выполнение файлов шаблонов с помощью свойства 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;  

Использование ExecuteToStream

Если у вас есть существующий поток, можно использовать метод ExecuteToStream вместо создания объекта Stream и использования метода Execute. Код из предыдущего примера пересматривается здесь, чтобы использовать метод 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;  
   }  
}  

Примечание.

Вы также можете использовать ExecuteXMLReadermethod, возвращающий объект XmlReader. Дополнительные сведения см. в разделе "Выполнение SQL-запросов с помощью метода ExecuteXMLReader".