Başka bir programa bir paket çıktı yükleniyor

İstemci uygulamaları okuyabilir, çıkışını Integration Services aşağıdaki seçeneklerden birini kullanarak paketleri:

  • ADO.NETne zaman çıktı kaydedildiği için SQL Server hedefler.

  • Sınıfları System.IO bir düz dosya hedef çıktı kaydedildiğinde ad alanı.

Ancak, istemci uygulaması da paket çıktı doğrudan bellekten veri devam ederse bir ara adım gerek kalmadan okuyabilirsiniz.

Bu çözüm için anahtar Microsoft.SqlServer.Dts.DtsClient özelleştirilmiş uygulamaları içeren ad alanı IDbConnection, IDbCommand, ve IDbDataParameter dan arabirimleri System.Data ad.Bu ad alanı, varsayılan olarak, yüklü olduğunu Microsoft.SqlServer.Dts.DtsClient.dll, derleme bulabilirsiniz %ProgramFiles%\Microsoft SQL Server\100\DTS\Binn klasörü.

Not

Bu konuda anlatılan yordamı gerektiren DelayValidation özellik veri akışı görev ve herhangi bir üst nesne küme için varsayılan değer olan False.

Bu konudaki bölümler

  • Nasıl bir paket çıktısını doğrudan bellekten yükleme

  • Örnek

Nasıl bir paket çıktısını doğrudan bellekten yükleme

Bu yordamı, yönetilen kod, doğrudan bellekten, DataReader hedef içeren bir paket çıkışını yükleyen bir istemci uygulaması geliştirmek için nasıl kullanılacağı gösterilmiştir.Bu yordamı izleyen bölümünde özetlenen yordamı adımları gösteren bir kod örneği olur.

Bir istemci uygulamasına bellekten çıktı paket yüklemek için

  1. Paket veri akışı istemci uygulamasına okumak istediğiniz çıktı almak için DataReader hedef yapılandırın.Bu ad daha sonra istemci uygulamasında kullanacağından DataReader hedef açıklayıcı bir ad verin.DataReader hedef adını not alın.

  2. Geliştirme projesinde küme başvuru Microsoft.SqlServer.Dts.DtsClient ad bulma derleme tarafından Microsoft.SqlServer.Dts.DtsClient.dll.Varsayılan olarak, bu derleme yüklü C:\Program files\microsoft sql server\100\dts\binn.Import the namespace into your code by using the C# using or the Visual Basic Imports statement.

  3. Kodunuzda türünde bir nesne oluştur DtsClient.DtsConnection bir bağlantı ile dize için gereken komut satırı parametrelerini içeren dtexec.exe paket çalıştırmak için.Daha fazla bilgi için bkz: dtexec yardımcı programı (SSIS aracı).Ayrıca dtexecui gerekli bağlantı oluşturmak için yardımcı dize görsel olarak.

    Not

    Bu yordamı aşağıdaki örnek kodu kullanarak paket dosya sisteminden yükler /FILE <path and filename> sözdizimi.Ancak, aynı zamanda paketinden yükleyebilirsiniz msdb veritabanı kullanarak /SQL <package name> sözdizimi, ya da Integration Services kullanarak paket deposu /DTS \<folder name>\<package name> sözdizimi.

  4. Bu bağlantı ile bağlantıyı açmak dize.

  5. Türünde bir nesne oluştur DtsClient.DtsCommand kullanan önceden oluşturulmuş DtsConnection olarak kendi bağlantı.Set komutunu 's CommandText özellik paket DataReader hedef adına.Ardından çağrı ExecuteReader paket sonuçlar içine yüklemek için komut nesnesinin yöntemyeni bir DataReader.

  6. İsteğe bağlı olarak, dolaylı olarak çıkış paket kullanarak stratejisinin koleksiyon , DtsDataParameter üzerindeki nesneleri DtsCommand nesne değişkenleri içinde tanımlanan değerleri geçirmek içinpaket. Paket içerisinde, bu değişkenleri ifadeler veya sorgu parametreleri olarak etkilemek için kullanabilirsiniz sonuçlar DataReader hedef döndürdü.Bu değişkenleri tanımlamak gerekir paket , DtsClient ile kullanmadan önce ad DtsDataParameter nesnesinden bir istemci uygulaması.(Tıklatmanız gerekebilir Değişken Sütunları Seç araç çubuğu düğmesini değişkenleri görüntülemek için pencereyi ad sütun.) Kodunuzda eklediğinizde, istemci, bir DtsDataParameter için Parameters koleksiyon , DtsCommand, ihmal DtsClient ad alanı başvurusu değişken adı.Örneğin:

    command.Parameters.Add(new DtsDataParameter("MyVariable", 1));
    
  7. Call Read tekrar tekrar gerektiğinde satırları aracılığıyla döngü için DataReader nesnesinin yöntem çıktı veri.Verileri kullanın veya daha sonra kullanmak için veri istemci uygulamada kaydedin.

    Önemli notÖnemli

    The Read method of this implementation of the DataReader returns true one more time after the last row of data has been read.Bunu DataReader aracılığıyla döngüsü her zamanki kodunu kullanmak zorlaştırır Read verir true.Kodunuzu DataReader veya beklenen sayıda, ek, son bir çağrı olmadan okumak sonra bağlantıyı kapatmaya çalışır, Read yöntem, işlenmeyen bir özel durum. kod yükseltecektirAncak, kodunuzun bu son yineleme aracılığıyla bir döngü verilerini okumaya çalışırsa, Read hala verir true ancak son satırı geçirilen, kod işlenmeyen bir yükseltmek ApplicationException iletisi "SSIS IDataReader olduğu sonundan resultset." Bu davranış, diğer DataReader uygulamaları farklıdır.Bu nedenle, bir döngü sırasında DataReader satırları üzerinden okumak için kullanırken, Read verir true, catch, test, kod ve atma Bu beklenen yazmak gerekir ApplicationException yaratılışı son başarılı Read yöntem.Veya, beklenen satır sayısını önceden biliyorsanız, satırları işlemek ve sonra call Read daha fazla bir yöntem saat DataReader ve bağlantı. kapatmadan önce

  8. Call Dispose yöntem, DtsCommand nesne.Bu herhangi kullandıysanız, özellikle önemlidir DtsDataParameter nesneler.

  9. DataReader ve bağlantı nesneleri kapatın.

Örnek

Aşağıdaki örnek, tek bir toplu değerini hesaplar ve bir DataReader hedef değeri kaydeder ve sonra bu değer DataReader okuyan ve bir Windows Form üzerinde bir metin kutusundaki değeri görüntüler paket çalıştırır.

Bir istemci uygulamasına çıktı paket yüklenirken, parametrelerin kullanılması gerekli değildir.Parametre kullanmak istemiyorsanız, değişken olarak kullanımını ihmal DtsClient ad alanı kullanan kod ihmal ve DtsDataParameter nesne.

Test paket oluşturmak için

  1. Yeni bir oluşturmak Integration Services paket."DtsClientWParamPkg.dtsx" örnek kod kullanır paket adı olarak.

  2. DtsClient ad alanında dize türünde bir değişken ekleyin.Örnek kod, değişken adı olarak ülke kullanın.(Tıklatmanız gerekebilir Değişken Sütunları Seç araç çubuğu düğmesini değişkenleri görüntülemek için pencereyi ad sütun.)

  3. Bağlanan bir ole db Bağlantı Yöneticisi'ni ekleme AdventureWorks2008R2 örnek veritabanı.

  4. Bir veri akışı görevi ekleme paket ve veri akışı tasarım yüzeyine geçiş yapın.

  5. ole db kaynak veri akışı ekleyin ve önceden oluşturulmuş ole db Bağlantı Yöneticisi'ni kullanmak üzere ve aşağıdaki sql komutunu yapılandırın:

    SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?
    
  6. ' I parametreleri ve de Sorgu parametrelerini ayarlamak iletişim kutusunda, tek bir giriş parametre sorgu, Parameter0, DtsClient::Country değişken eşleyin.

  7. Eklemek için bir toplama dönüştürme veri akışıve dönüştürme için ole db kaynak çıkış bağlanın.Toplama dönüşümü Düzenleyicisi'ni açın ve bir "tüm saymak" peform için yapılandırma tüm giriş sütunları (*) ve diğer ad ad CustomerCount ile toplanan değer çıkış işlemi.

  8. Bir DataReader hedef veri akışına ekleme ve toplam çıkış bağlanmak dönüştürme DataReader hedef."datareaderdest" örnek kod kullanır DataReader adı olarak.Tek kullanılabilir giriş sütun, CustomerCount, hedef seçin.

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

Sınama uygulaması oluşturmak için

  1. Yeni bir Windows Forms uygulaması yaratmak.

  2. Başvuru Ekle Microsoft.SqlServer.Dts.DtsClient ad alanındaki aynı adlı derleme göz atarak %ProgramFiles%\Microsoft SQL Server\100\DTS\Binn.

  3. Kopyalama ve kod modülü form için aşağıdaki örnek kodu yapıştırın.

  4. Değeri değiştirmek dtexecArgs gerektiği gibi değişken bu nedenle verdiğini içeren için gereken komut satırı parametreleri dtexec.exe paket çalıştırmak için.Örnek kod, paket dosya sisteminden yükler.

  5. Değeri değiştirmek dataReaderName gerektiği gibi değişken bu nedenle verdiğini içeren paket DataReader hedef adı.

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

  7. I çalıtırın ve düğmesini tıklatın.paket çalıştıran, çalışırken kısa bir süre sonra formdaki metin kutusunda görüntülenen paket (Kanada'daki sayım) tarafından hesaplanan toplu değeri 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;

    }
  }
}
Integration Services simgesi (küçük)Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve seçilen topluluk çözümleri yanı sıra Microsoft videolar için ziyaret Integration Services sayfa msdn veya TechNet:

Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.