Aracılığıyla paylaş


Yerel Paketin Çıktısını Yükleme

Şunlar için geçerlidir: Azure Data Factory'de SQL Server SSIS Integration Runtime

İstemci uygulamaları, çıktı ADO.NET kullanılarak SQL Server hedeflerine kaydedildiğinde veya çıkış System.IO ad alanında sınıflar kullanılarak düz bir dosya hedefine kaydedildiğinde Integration Services paketlerinin çıkışını okuyabilir. Ancak istemci uygulaması, verileri kalıcı hale getirmek için bir ara adıma gerek kalmadan doğrudan bellekten bir paketin çıkışını da okuyabilir. Bu çözümün anahtarı, IDbConnection, IDbCommandve System.Data ad alanından IDbDataParameter arabirimlerini içeren Microsoft.SqlServer.Dts.DtsClient ad alanıdır. Derleme Microsoft.SqlServer.Dts.DtsClient.dll varsayılan olarak %ProgramFiles%\Microsoft SQL Server\100\DTS\Binnyüklenir.

Önemli

bu makalede açıklanan ve DtsClient kitaplığını kullanan yordam, yalnızca paket dağıtım modeliyle (/SQL, /DTSveya /File seçeneğiyle) dağıtılan paketler için çalışır. Bu yordam, sunucu dağıtım modeliyle (yani /ISServer seçeneğiyle) dağıtılan paketler için çalışmaz. Sunucu dağıtım modeliyle dağıtılan bir yerel paketin çıkışını kullanmak için (yani, /ISServer seçeneğiyle), bu makalede açıklanan yordam yerine Veri Akışı Hedefi kullanın.

Not

Bu konuda açıklanan yordam, Veri Akışı görevinin ve üst nesnelerin DelayValidation özelliğinin varsayılan Falsedeğerine ayarlanmasını gerektirir.

Açıklama

Bu yordam, datareader hedefine sahip bir paketin çıkışını doğrudan bellekten yükleyen yönetilen kodda istemci uygulamasının nasıl geliştirildiğini gösterir. Burada özetlenen adımlar, aşağıdaki kod örneğinde gösterilmiştir.

Veri paketi çıkışını bir istemci uygulamasına yüklemek için

  1. Pakette, istemci uygulamasına okumak istediğiniz çıkışı almak için bir DataReader hedefi yapılandırın. Bu adı daha sonra istemci uygulamanızda kullanacağınız için DataReader hedefine açıklayıcı bir ad verin. DataReader hedefinin adını not edin.

  2. Geliştirme projesinde, Microsoft.SqlServer.Dts.DtsClient.dllderlemesini bularak Microsoft.SqlServer.Dts.DtsClient ad alanına bir başvuru ayarlayın. Varsayılan olarak, bu derleme C:\Program Files\Microsoft SQL Server\100\DTS\Binnkonumunda yüklenir. C# Using veya Visual Basic Imports deyimini kullanarak ad alanını kodunuz içine aktarın.

  3. Kodunuzda, dtexec.exe tarafından paketi çalıştırmak için gereken komut satırı parametrelerini içeren bir bağlantı dizesiyle DtsClient.DtsConnection türünde bir nesne oluşturun. Daha fazla bilgi için bkz. dtexec Yardımcı Programı. Ardından bu bağlantı dizesiyle bağlantıyı açın. Gerekli bağlantı dizesini görsel olarak oluşturmak için dtexecui yardımcı programını da kullanabilirsiniz.

    Not

    Örnek kod, /FILE <path and filename> söz dizimini kullanarak paketi dosya sisteminden yüklemeyi gösterir. Bununla birlikte, paketi /SQL <package name> söz dizimini kullanarak MSDB veritabanından veya /DTS \<folder name>\<package name> söz dizimini kullanarak Integration Services paket deposundan da yükleyebilirsiniz.

  4. Daha önce oluşturulmuş DtsConnection kullanan DtsClient.DtsCommand türünde bir nesne oluşturun ve CommandText özelliğini paketteki DataReader hedefinin adı olarak ayarlayın. Ardından, paket sonuçlarını yeni bir DataReader'a yüklemek için komut nesnesinin ExecuteReader yöntemini çağırın.

  5. İsteğe bağlı olarak, DtsCommand nesnesindeki DtsDataParameter nesnelerinin koleksiyonunu kullanarak paketin çıkışını dolaylı olarak parametreleştirebilir ve değerleri pakette tanımlanan değişkenlere geçirebilirsiniz. Paketin içinde, DataReader hedefine döndürülen sonuçları etkilemek için bu değişkenleri sorgu parametreleri olarak veya ifadelerde kullanabilirsiniz. Bu değişkenleri bir istemci uygulamasındaki DtsDataParameter nesnesiyle kullanabilmek için önce DtsClient ad alanındaki pakette tanımlamanız gerekir. (Ad Alanı sütununu görüntülemek için Değişkenler penceresindeKi değişken sütunlarını araç çubuğu seç düğmesine tıklamanız gerekebilir.) İstemci kodunuzda, DtsCommandParameters koleksiyonuna bir DtsDataParameter eklediğinizde, değişken adından DtsClient ad alanı başvurularını atlayın. Mesela:

    command.Parameters.Add(new DtsDataParameter("MyVariable", 1));  
    
  6. Çıktı verilerinin satırları arasında döngü yapmak için DataReader'ın Read yöntemini gerektiği gibi tekrar tekrar çağırın. verileri kullanın veya verileri daha sonra kullanmak üzere istemci uygulamasında kaydedin.

    Önemli

    DataReader'ın bu uygulamasının Read yöntemi, son veri satırı okunduktan sonra bir kez daha true döndürür. Bu, Okuma truedöndürürken DataReader'da döngü yapan her zamanki kodun kullanılmasını zorlaştırır. Kodunuz, Read yöntemine ek ve son çağrı yapmadan beklenen satır sayısını okuduktan sonra DataReader'ı veya bağlantıyı kapatmaya çalışırsa, kod işlenmeyen bir özel durum oluşturur. Ancak kodunuz bir döngü aracılığıyla bu son yinelemedeki verileri okumaya çalışırsa, Okuma yine de true döndürdüğünde, kod "SSIS IDataReader sonuç kümesinin sonunu geçti" iletisiyle applicationexception işlenmeyen bir oluşturur. Bu davranış, diğer DataReader uygulamalarından farklıdır. Bu nedenle, Okuma truedöndürürken DataReader'daki satırları okumak için bir döngü kullanırken, Read yöntemine yapılan son başarılı çağrıda applicationexception bu beklenen yakalamak, test etmek ve atmak için kod yazmanız gerekir. Veya beklenen satır sayısını önceden biliyorsanız, datareader ve bağlantıyı kapatmadan önce satırları işleyebilir ve Read yöntemini bir kez daha çağırabilirsiniz.

  7. DtsCommand nesnesinin Dispose yöntemini çağırın. Bu özellikle DtsDataParameter nesneleri kullandıysanız önemlidir.

  8. DataReader'ı ve bağlantı nesnelerini kapatın.

Örnek

Aşağıdaki örnek, tek bir toplama değeri hesaplayan ve değeri DataReader hedefine kaydeden bir paket çalıştırır ve ardından DataReader'dan bu değeri okur ve değeri Bir Windows Formundaki metin kutusunda görüntüler.

Bir paketin çıktısı bir istemci uygulamasına yüklenirken parametre kullanımı gerekli değildir. Parametre kullanmak istemiyorsanız, DtsClient ad alanında değişkenin kullanımını atlayabilir ve DtsDataParameter nesnesini kullanan kodu atlayabilirsiniz.

Test paketini oluşturmak için

  1. Yeni bir Integration Services paketi oluşturun. Örnek kod, paketin adı olarak "DtsClientWParamPkg.dtsx" kullanır.

  2. DtsClient ad alanına String türünde bir değişken ekleyin. Örnek kod, değişkenin adı olarak Country kullanır. (Ad Alanı sütununu görüntülemek için Değişkenler penceresindeKi değişken sütunlarını araç çubuğu seç düğmesine tıklamanız gerekebilir.)

  3. AdventureWorks2025 örnek veritabanına bağlanan bir OLE DB bağlantı yöneticisi ekleyin.

  4. Pakete bir veri akışı görevi ekleyin ve Veri Akışı tasarım yüzeyine geçin.

  5. Veri akışına bir OLE DB kaynağı ekleyin ve daha önce oluşturulan OLE DB bağlantı yöneticisini ve aşağıdaki SQL komutunu kullanacak şekilde yapılandırın:

    SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?  
    
  6. Parametreler'e tıklayın ve Sorgu Parametrelerini Ayarla iletişim kutusunda Parameter0 sorgusundaki tek giriş parametresini DtsClient::Country değişkenine eşleyin.

  7. Veri akışına bir Toplama dönüşümü ekleyin ve OLE DB kaynağının çıkışını dönüştürmeye bağlayın. Toplama Dönüştürme Düzenleyicisi'ni açın ve tüm giriş sütunlarında (*) bir "Tümünü say" işlemi gerçekleştirmek ve toplanan değeri CustomerCount diğer adıyla çıkarmak için yapılandırın.

  8. Veri akışına bir DataReader hedefi ekleyin ve Toplama dönüştürmesinin çıkışını DataReader hedefine bağlayın. Örnek kod, DataReader adı olarak "DataReaderDest" kullanır. Hedef için tek kullanılabilir giriş sütununu (CustomerCount) seçin.

  9. Paketi kaydedin. Daha sonra oluşturulan test uygulaması paketi çalıştırır ve çıktısını doğrudan bellekten alır.

Test uygulamasını oluşturmak için

  1. Yeni bir Windows Forms uygulaması oluşturun.

  2. %ProgramFiles%\Microsoft SQL Server\100\DTS\Binniçinde aynı ada sahip derlemeye göz atarak Microsoft.SqlServer.Dts.DtsClient ad alanına bir başvuru ekleyin.

  3. Aşağıdaki örnek kodu kopyalayıp formun kod modülüne yapıştırın.

  4. dtexecArgs değişkeninin değerini, paketi çalıştırmak için dtexec.exe gereken komut satırı parametrelerini içerecek şekilde değiştirin. Örnek kod, paketi dosya sisteminden yükler.

  5. dataReaderName değişkeninin değerini, paketteki DataReader hedefinin adını içermesi için gerektiği gibi değiştirin.

  6. Forma bir düğme ve metin kutusu koyun. Örnek kod, düğmenin adı olarak btnRun kullanır ve metin kutusunun adı olarak txtResults .

  7. Uygulamayı çalıştırın ve düğmeye tıklayın. Paket çalışırken kısa bir duraklama yaptıktan sonra, formdaki metin kutusunda görüntülenen paket (Kanada'daki müşterilerin sayısı) tarafından hesaplanan toplama değerini görmeniz gerekir.

Örnek Kod

Imports System.Data  
Imports Microsoft.SqlServer.Dts.DtsClient  
  
Public Class Form1  
  
  Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click  
  
    Dim dtexecArgs As String  
    Dim dataReaderName As String  
    Dim countryName As String  
  
    Dim dtsConnection As DtsConnection  
    Dim dtsCommand As DtsCommand  
    Dim dtsDataReader As IDataReader  
    Dim dtsParameter As DtsDataParameter  
  
    Windows.Forms.Cursor.Current = Cursors.WaitCursor  
  
    dtexecArgs = "/FILE ""C:\...\DtsClientWParamPkg.dtsx"""  
    dataReaderName = "DataReaderDest"  
    countryName = "Canada"  
  
    dtsConnection = New DtsConnection()  
    With dtsConnection  
      .ConnectionString = dtexecArgs  
      .Open()  
    End With  
  
    dtsCommand = New DtsCommand(dtsConnection)  
    dtsCommand.CommandText = dataReaderName  
  
    dtsParameter = New DtsDataParameter("Country", DbType.String)  
    dtsParameter.Direction = ParameterDirection.Input  
    dtsCommand.Parameters.Add(dtsParameter)  
  
    dtsParameter.Value = countryName  
  
    dtsDataReader = dtsCommand.ExecuteReader(CommandBehavior.Default)  
  
    With dtsDataReader  
      .Read()  
      txtResults.Text = .GetInt32(0).ToString("N0")  
    End With  
  
    'After reaching the end of data rows,  
    ' call the Read method one more time.  
    Try  
      dtsDataReader.Read()  
    Catch ex As Exception  
      MessageBox.Show("Exception on final call to Read method:" & ControlChars.CrLf & _  
      ex.Message & ControlChars.CrLf & _  
      ex.InnerException.Message, "Exception on final call to Read method", _  
      MessageBoxButtons.OK, MessageBoxIcon.Error)  
    End Try  
  
    ' The following method is a best practice, and is  
    '  required when using DtsDataParameter objects.  
    dtsCommand.Dispose()  
  
    Try  
      dtsDataReader.Close()  
    Catch ex As Exception  
      MessageBox.Show("Exception closing DataReader:" & ControlChars.CrLf & _  
      ex.Message & ControlChars.CrLf & _  
      ex.InnerException.Message, "Exception closing DataReader", _  
      MessageBoxButtons.OK, MessageBoxIcon.Error)  
    End Try  
  
    Try  
      dtsConnection.Close()  
    Catch ex As Exception  
      MessageBox.Show("Exception closing connection:" & ControlChars.CrLf & _  
      ex.Message & ControlChars.CrLf & _  
      ex.InnerException.Message, "Exception closing connection", _  
      MessageBoxButtons.OK, MessageBoxIcon.Error)  
    End Try  
  
    Windows.Forms.Cursor.Current = Cursors.Default  
  
  End Sub  
  
End Class  
using System;  
using System.Windows.Forms;  
using System.Data;  
using Microsoft.SqlServer.Dts.DtsClient;  
  
namespace DtsClientWParamCS  
{  
  public partial class Form1 : Form  
  {  
    public Form1()  
    {  
      InitializeComponent();  
      this.btnRun.Click += new System.EventHandler(this.btnRun_Click);  
    }  
  
    private void btnRun_Click(object sender, EventArgs e)  
    {  
      string dtexecArgs;  
      string dataReaderName;  
      string countryName;  
  
      DtsConnection dtsConnection;  
      DtsCommand dtsCommand;  
      IDataReader dtsDataReader;  
      DtsDataParameter dtsParameter;  
  
      Cursor.Current = Cursors.WaitCursor;  
  
      dtexecArgs = @"/FILE ""C:\...\DtsClientWParamPkg.dtsx""";  
      dataReaderName = "DataReaderDest";  
      countryName = "Canada";  
  
      dtsConnection = new DtsConnection();  
      {  
        dtsConnection.ConnectionString = dtexecArgs;  
        dtsConnection.Open();  
      }  
  
      dtsCommand = new DtsCommand(dtsConnection);  
      dtsCommand.CommandText = dataReaderName;  
  
      dtsParameter = new DtsDataParameter("Country", DbType.String);  
      dtsParameter.Direction = ParameterDirection.Input;  
      dtsCommand.Parameters.Add(dtsParameter);  
  
      dtsParameter.Value = countryName;  
  
      dtsDataReader = dtsCommand.ExecuteReader(CommandBehavior.Default);  
  
      {  
        dtsDataReader.Read();  
        txtResults.Text = dtsDataReader.GetInt32(0).ToString("N0");  
      }  
  
      //After reaching the end of data rows,  
      // call the Read method one more time.  
      try  
      {  
        dtsDataReader.Read();  
      }  
      catch (Exception ex)  
      {  
        MessageBox.Show(  
          "Exception on final call to Read method:\n" + ex.Message + "\n" + ex.InnerException.Message,  
          "Exception on final call to Read method", MessageBoxButtons.OK, MessageBoxIcon.Error);  
      }  
  
      // The following method is a best practice, and is  
      //  required when using DtsDataParameter objects.  
      dtsCommand.Dispose();  
  
      try  
      {  
        dtsDataReader.Close();  
      }  
      catch (Exception ex)  
      {  
        MessageBox.Show(  
          "Exception closing DataReader:\n" + ex.Message + "\n" + ex.InnerException.Message,  
          "Exception closing DataReader", MessageBoxButtons.OK, MessageBoxIcon.Error);  
      }  
  
      try  
      {  
        dtsConnection.Close();  
      }  
      catch (Exception ex)  
      {  
        MessageBox.Show(  
          "Exception closing connection:\n" + ex.Message + "\n" + ex.InnerException.Message,  
          "Exception closing connection", MessageBoxButtons.OK, MessageBoxIcon.Error);  
      }  
  
      Cursor.Current = Cursors.Default;  
  
    }  
  }  
}  

Ayrıca Bkz.

Yerel ve Uzaktan Yürütme arasındaki farkları anlama
Program Aracılığıyla Yerel Paket Yükleme ve Çalıştırma
Program Aracılığıyla Bir Uzak Paketi Yükleme ve Çalıştırma