Aracılığıyla paylaş


SQL Sorguları Yürütme (SQLXML Yönetilen Sınıfları)

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

Bu örnekte aşağıdakiler gösterilmektedir:

  • Parametre oluşturma (SqlXmlParameter nesneleri).

  • SqlXmlParameter nesnelerinin özelliklerine (Ad ve Değer) değerler atanıyor.

Bu örnekte, soyadının değeri parametre olarak iletilen çalışanın ilk adı, soyadı ve doğum tarihi alınmak için basit bir SQL sorgusu çalıştırılır. Parametre (Soyad) belirtildiğinde yalnızca Değer özelliği ayarlanır. İsim özelliği ayarlanmamıştır, çünkü bu sorguda parametre konumsaldır ve isim gerekmez.

SqlXmlCommand nesnesinin varsayılan olarak CommandType özelliği Sql'dir. Bu nedenle, özellik açıkça belirlenmez.

Uyarı

Kodda, bağlantı dizisinde Microsoft SQL Server örneğinin adını belirtmeniz gerekir.

İşte C# kodu:

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;  
}  
}  

Uygulamayı test etmek için

  1. Bu konuda verilen C# kodunu (DocSample.cs) bir klasörde kaydedin.

  2. Kodu derleyin. Kodu komut isteğinde derlemek için şunları kullanın:

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

    Bu, bir yürütülebilir (DocSample.exe) oluşturur.

  3. Komut dizisinde, DocSample.exeçalıştırın.

Bu örneği test etmek için Microsoft .NET Framework'ün bilgisayarınızda yüklü olması gerekir.

SQL sorgularını komut metni olarak belirtmek yerine, aşağıdaki kod parçasında gösterildiği gibi, bir updategram (aynı zamanda bir şablon) çalıştıran bir şablon belirtebilirsiniz ve müşteri kaydı ekleyebilirsiniz. Dosyalarda şablonlar ve updategramlar belirleyip dosyaları çalıştırabilirsiniz. Daha fazla bilgi için, CommandText Özelliğini kullanarak Şablon Dosyalarını Çalıştırma bölümüne bakınız.

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 kullanımı

Mevcut bir akışınız varsa, Stream nesnesi oluşturup Execute yöntemini kullanmak yerine ExecuteToStream yöntemini kullanabilirsiniz. Önceki örnekten alınan kod burada ExecuteToStream yöntemini kullanacak şekilde revize edilmiştir:

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;  
   }  
}  

Uyarı

Ayrıca bir XmlReader nesnesi döndüren ExecuteXMLReadermethod yöntemini de kullanabilirsiniz. Daha fazla bilgi için, ExecuteXMLReader Yöntemi Kullanılarak SQL Sorgularını Yürütme bölümüne bakınız.