Yerel bir paket çıkışını yükleniyor

Istemci uygulamaları çıkışını okuyabilir Integration Services Çıktı kaydedildiğinde paketler SQL Server kullanarak, hedefleri ADO.NET, veya ne zaman çıktı için düz bir hedef olarak sınıfları kullanarak kaydedilmiş System.ıo ad alanı.Ancak, bir istemci uygulaması da çıkış paket bellekten doğrudan, verileri gerçekleştikten bir ara adım gerek kalmadan okuyabilirsiniz.Bu çözüm anahtar Microsoft.SqlServer.Dts.DtsClient özel uygulamaları içeren ad, IDbConnection, IDbCommand, ve IDbDataParameter gelen arabirimlerini System.Data ad alanı.Derleme Microsoft.SqlServer.dts.DtsClient.dll varsayılan olarak yüklenir SQL Server\100\DTS\Binn %ProgramFiles%\Microsoft.

Not

Bu konuda anlatılan yordamı gerektiren DelayValidation Veri akışı görevinin ve herhangi bir üst nesne özellik varsayılan değer olarak ayarlanması Yanlış.

Açıklama

Bu yordam, bir istemci uygulamasında çıktısını bir veri okuyucu paketiyle yüklenen yönetilen kod geliştirmek gösterilmiştir hedef bellekten doğrudan.Burada özetlenen adımları aşağıdaki kod örneğinde gösterildiği.

Bir istemci uygulamasına veri paket Çıkış'ı yüklemek için

  1. Içinde paket, istemci uygulamasına okumak istediğiniz çıktı almak için bir veri okuyucu hedef yapılandırın.Bu ad daha sonra istemci uygulamasında kullanacağınız bu yana veri okuyucu hedef açıklayıcı bir ad verin.Bir veri okuyucu hedef adını not alın.

  2. Geliştirme projedeki küme başvuru Microsoft.SqlServer.Dts.DtsClient derleme bulma tarafından kullanılan ad Microsoft.SqlServer.dts.DtsClient.dll.Varsayılan olarak, bu derleme yüklenmiş C:\Program Files\Microsoft SQL Server\100\DTS\Binn.Import the namespace into your code by using the C# Using or the Visual BasicImports statement.

  3. Kodunuzda türünde bir nesne oluşturun... DtsClient.DtsConnection ile bir bağlantı dizesi gerektirdiği komut satırı parametrelerini içeren dtexec.exe paket çalıştırmak için.Daha fazla bilgi için bkz:dtexec yardımcı programı.Bu bağlantıyla bağlantıyı açar dize.Ayrıca dtexecui gerekli bir bağlantı dizesi görsel olarak oluşturmak için yardımcı programı.

    Not

    Örnek kodu kullanarak, dosya sisteminden paket yükleme gösterir /FILE <path and filename> sözdizimi. Ancak, ayrıca paket MSDB veritabanını kullanarak yükleyebilir ve /SQL <package name> sözdizimi, veya Integration Services Paket deposunun'ı kullanarak /DTS \<folder name>\<package name> sözdizimi.

  4. Türünde bir nesne oluştur DtsClient.DtsCommand önceden oluşturulmuş kullanan DtsConnection ayarlayın, CommandText özellik adına veri okuyucu hedefte paket. Sonra arama ExecuteReader yüklemek için komut nesnesinin yöntem paket içine yeni bir veri okuyucu sonuçlar.

  5. Isteğe bağlı olarak, dolaylı olarak çıkış paketi kullanarak parameterize koleksiyon, DtsDataParameter üzerindeki nesneleri DtsCommand Nesne, paket içinde tanımlanan değişkenler için değerleri geçirmek için. Içinde paket etkileyen ifadelerinde veri okuyucu hedef sonuçlar döndürdü ve bu değişkenler, sorgu parametre olarak kullanabilirsiniz.Bu değişkenlerin tanımlamalısınız paket, DtsClient kullanılmadan önce ile adDtsDataParameter bir istemci uygulama nesnesi. (Tıklatmanız gerekebilir Değişken bir sütun seçin. araç çubuğu düğmesiDeğişkenleri Görüntülenecek penceresiAd alanı sütun.) Eklediğinizde bir istemci kodunuzdaDtsDataParameter için Parameters topluluğu DtsCommand, değişken adını DtsClient ad başvurusundan atlayın. Örneğin:

    command.Parameters.Add(new DtsDataParameter("MyVariable", 1));
    
  6. Call Read art arda çıkış veri satırları arasında döngü şekilde veri okuyucu yöntem. Verileri daha sonra kullanmak için istemci uygulamasında kaydetmek veya verileri kullanın.

    Important noteImportant Note:

    The Read yöntem of this implementation of the veri okuyucu returns true one more saat after the last row of data has been read. Bu normal sırasında veri okuyucu aracılığıyla döngüsü kodu kullanmak zorlaştırır Read verir true. Kodunuzu veri okuyucu veya beklenen bir ek, son arama olmadan, satır sayısı okuma sonra bağlantıyı kapatmaya çalışırsa Read yöntem, işlenmeyen bir özel durum kodu yükseltmenizi. Ancak, kodunuzu bu son yineleme aracılığıyla, döngü verilerini okumaya çalışırsa, Read yine de verir. true Ancak, son satırın geçirildi, kodu çözülemeyen bir Yükselt ApplicationExceptionile "SSIS ıdatareader resultset sonunun iletidir." Bu davranış, diğer veri okuyucu uygulamaları farklıdır. Bu nedenle, kullanırken bir döngü satırları sırasında veri okuyucu aracılığıyla okunamıyor. Read verir true, size yakalamak için , kod yazmak için sınayın ve bu beklenen iptal ApplicationException Son başarılı çağrısı üzerindeki Read yöntem. Veya, önceden beklenen satır sayısını biliyorsanız, satırları işleyin ve sonra call Read yöntem veri okuyucu ve bağlantıyı kapatmadan önce saat daha.

  7. Call Dispose yöntem DtsCommand nesne. Tüm kullandıysanız, bu özellikle önemlidir DtsDataParameter nesneler.

  8. veri okuyucu ve bağlantı nesneleri kapatın.

Örnek

Aşağıdaki örnekte, tek bir toplamak değeri hesaplayan bir veri okuyucu hedef değeri kaydeder ve veri okuyucu bu değeri okur ve bir metin kutusuna bir Windows formu görüntüler bir paket çalışır.

Parametreleri kullanımını çıkışını yüklerken gerekli değil bir paket bir istemci uygulamasının içinde.Bir parametre kullanmak istemiyorsanız, değişken olarak kullanımını atlayabilirsiniz DtsClient ad ve kullandığı kodu atlayın.DtsDataParameter nesne.

Sınama paket oluşturmak için

  1. Yeni oluşturma Integration Services paket. Örnek kod, "DtsClientWParamPkg.dtsx" paket adı olarak kullanır.

  2. Dize türünde bir değişken DtsClient ad olarak ekleyin.Örnek kodu, ülke adı değişkeni olarak kullanın.(Tıklatmanız gerekebilir Değişken bir sütun seçin. araç çubuğu düğmesiDeğişkenleri Görüntülenecek penceresiAd alanı sütun.)

  3. Bağlanan bir OLE DB Bağlantı Yöneticisi'ni ekleme AdventureWorks Örnek Veritabanı'nı tıklatın.

  4. Veri akışı göreve eklemek paket ve veri akışı tasarım yüzeyine geçiş yapar.

  5. Veri akışı için bir OLE DB kaynak eklemek ve daha önce oluşturulmuş OLE DB Bağlantı Yöneticisi'ni kullanmak için aşağıdaki SQL komutunu yapılandırın:

    SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?
    
  6. ' I tıklatın Parametreleri ve Sorgu parametreleri küme iletişim kutusunda, DtsClient::Country değişkenine tek girdi parametresi sorgudaki Parameter0, eşleme.

  7. Ekleme bir toplamak dönüştürme veri akışı ve OLE DB veri kaynağının çıkış için dönüştürme bağlanın.Toplu dönüştürme Düzenleyicisi'ni açın ve peform tüm giriş sütunları (*) "Tüm Count" bir işlemi ve Çıkış diğer ad ad CustomerCount değeriyle toplanan yapılandırın.

  8. Veri akışı için bir veri okuyucu hedef ekleme ve toplamak dönüştürme çıktısı veri okuyucu hedefe bağlantı.Örnek kod, "DataReaderDest" veri okuyucu adı olarak kullanır.Tek kullanılabilir giriş sütun, CustomerCount, hedef için seçin.

  9. paket kaydedin.Oluşturulan sınama uygulaması sonraki paket çalıştırmak ve doğrudan bellekten çıktısını almak.

Sınama uygulaması oluşturmak için

  1. Yeni Windows Forms uygulaması oluşturun.

  2. Başvuru Ekle Microsoft.SqlServer.Dts.DtsClient aynı adı içinde derlemesine tarama tarafından kullanılan ad SQL Server\100\DTS\Binn %ProgramFiles%\Microsoft.

  3. Kopyalayıp aşağıdaki örnek kod, form için Kod modüle yapıştırın.

  4. Değeri değiştirmek dtexecArgs tarafından gereken komut satırı parametrelerini içeren değişkeni gerekli.dtexec.exe paket çalıştırmak için.Örnek kod, dosya sisteminden paket yükler.

  5. Değeri değiştirmek dataReaderName değişken olarak, paketin veri okuyucu hedef adını içeren gerekli.

  6. Form üzerinde düğme ve bir metin kutusu yerleştirin.Örnek kodu kullanır. btnRun olarak düğmenin adını ve txtResults metin kutusunun adı.

  7. Uygulamayı çalıştırın ve bu düğmeyi tıklatın.Paketi çalıştıran, çalışırken kısa duraklamadan sonra formdaki metin kutusunda görüntülenen paket (Kanada'daki müã¾terilerimiz sayısı) tarafından hesaplanan toplamak değeri görmelisiniz.

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

    }
  }
}
Integration Services icon (small) Tümleştirme Hizmetleri ile güncel kalın

Karşıdan yüklemeler, makaleleri, örnekler ve en son Microsoft video yanı sıra, seçili topluluğun çözümleri için ziyaret Integration Services sayfa MSDN veya TechNet:

Bu güncelleştirmelerin otomatik bildirim için kullanılabilir RSS akışlarına abone olmak sayfa.