Yerel paket çıktı yükleniyor

İstemci uygulamaları çıkış okuyabilirsiniz Integration ServicesÇıkış için kaydedilen paketleri SQL Serverkullanarak hedefleri ADO.NET, ya da ne zaman çıktı kaydedilen bir düz dosya hedef sınıfları kullanarak System.IOnamespace. Ancak, istemci uygulaması da doğrudan doğruya--dan bellek, verileri inat bir ara adım gerek kalmadan bir paket çıktı okuyabilirsiniz. Bu çözümün anahtarı Microsoft.SqlServer.Dts.DtsClientözel uygulamaları içeren ad IDbConnection, IDbCommand, ve IDbDataParameter dan arabirimleri System.Datanamespace. Microsoft.SqlServer.Dts.DtsClient.dll varsayılan olarak yüklü derleme %ProgramFiles%\Microsoft SQL Server\100\DTS\Binn.

[!NOT]

Bu konuda anlatılan yordamı gerektiren DelayValidationözelliği veri akışı görev ve ana nesneler varsayılan değer olarak ayarlanmış olması yanlış.

Açıklama

Bu yordamı, bir istemci uygulaması bir paket ile bir DataReader hedef çıktı doğrudan bellekten yükler yönetilen kod geliştirmek gösterilmiştir. Burada özetlenen adımları aşağıdaki kod örneğinde gösterilen.

Bir istemci uygulamasına veri paketi çıktı yüklenemiyor

  1. Pakette, istemci uygulaması okumak istediğiniz çıktı almak için DataReader hedef yapılandırın. Bu ad daha sonra istemci uygulamanızın kullanacağı DataReader hedef açıklayıcı bir ad verin. DataReader hedef adını not edin.

  2. Geliştirme projesinde, başvuru ayarlamak Microsoft.SqlServer.Dts.DtsClientderleme bulma tarafından ad Microsoft.SqlServer.Dts.DtsClient.dll. Varsayılan olarak, bu derleme yüklü C:\Program Files\Microsoft SQL Server\100\DTS\Binn. C# kullanarak ad kodunuza alın Usingya da Visual Basic  Importsdeyimi.

  3. Kodunuzu, türünde bir nesne oluştur DtsClient.DtsConnectionkomut satırı parametrelerini içeren bir bağlantı dizesi ile gerekli dtexec.exepaketi çalıştırmak için. Daha fazla bilgi için, bkz. dtexec Utility. Bu bağlantı dizesi ile bağlantıyı açar. Ayrıca dtexecuigerekli bağlantı dizesi görsel olarak oluşturmak için yardımcı program.

    [!NOT]

    Paket dosya sisteminden kullanarak yükleme örnek kodu gösterilmiştir /FILE <path and filename>sözdizimi. Ancak de paketi msdb veritabanını kullanarak yükleyebilirsiniz /SQL <package name>sözdizimi veya Integration Servicespaketi kullanarak deposu /DTS \<folder name>\<package name>sözdizimi.

  4. Türünde bir nesne oluştur DtsClient.DtsCommandönceden oluşturulmuş kullanan DtsConnectionve onun CommandTextözelliği paket DataReader hedef adı. Ardından çağrı ExecuteReaderpaketi sonuçları yeni bir DataReader yüklemek için komut nesnesinin yöntemi.

  5. İsteğe bağlı olarak, dolaylı olarak paket çıktı koleksiyonu kullanarak parameterize DtsDataParameterüzerindeki nesneleri DtsCommandnesne paket içinde tanımlanan değişkenlerin değerleri geçmesine. Paketin içinde size bu değişkenler sorgu parametreleri veya ifadeleri DataReader hedef için döndürülen sonuçlarını etkilemek için kullanabilirsiniz. Paketinde bu değişkenleri tanımlamak gerekir DtsClientile kullanılmadan önce ad DtsDataParameternesne bir istemci uygulamasından. (Sen-ebilmek lüzum-e doğru tıkırtı Değişken sütunları seç araç çubuğu düğmesinin değişkenleri penceresini görüntülemek için Namespace sütun.) Kodunuzda eklediğinizde istemci bir DtsDataParameteriçin Parameterstopluluğu DtsCommand, DtsClient ad alanı başvurusu gelen değişken adını atlarsanız. Örneğin:

    command.Parameters.Add(new DtsDataParameter("MyVariable", 1));
    
    command.Parameters.Add(new DtsDataParameter("MyVariable", 1));
    
  6. Arama Readart arda satırlar döngü için gerektiğinde DataReader yöntemi çıktı verilerini. Verileri kullanın veya daha sonra kullanmak için veri istemci uygulamada kaydedin.

    Önemli notÖnemli

    ReadDataReader uygulaması yöntemi döndürür trueveri son satırını okuduktan sonra bir kez daha. Bu, DataReader aracılığıyla döngüler her zamanki kodunu kullanmak zorlaştırır Readdöner true. Kodunuzu DataReader veya beklenen sayıda ek, son bir çağrı olmadan satır okuduktan sonra bağlantıyı kapatır denerse Readyöntemi, işlenmeyen bir özel durum kodunu arttıracak. Ancak, bu son yineleme aracılığıyla döngü, verileri okumak kod çalışırsa ne zaman Readhala döner trueama geçti son satırı, kod bir işlenmemiş arttıracak ApplicationExceptionile "SSIS IDataReader resultset sonuna mesajdır." Bu davranış diğer DataReader uygulamaları farklıdır. Bu nedenle, bir döngü sırasında DataReader satırları okuyun kullanırken Readdöndürür true, yakalamak için sınama, kod ve bu beklenen atma yazmaya gerek ApplicationExceptionson başarılı çağrısı üzerine Readyöntemi. Beklenen satır sayısını önceden biliyorsanız, satırları işlemek ve ardından arama Readyöntemi DataReader ve bağlantıyı kapatmadan önce bir kez daha.

  7. Arama Disposeyöntemi DtsCommandnesnesini. Bu özellikle eğer sen-si olmak kullanılmış herhangi önemli bir DtsDataParameternesnelerin.

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

Örnek

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

Ne zaman bir istemci uygulaması bir paket çıktı yükleniyor parametreleri kullanmak gerekli değildir. Bir parametre kullanmak istemiyorsanız, değişken kullanımı atlayabilirsiniz DtsClientad ve kullandığı kodu ihmal DtsDataParameternesne.

Sınav paketi oluşturmak için

  1. Yaratmak a yeni Integration Servicespaket. "DtsClientWParamPkg.dtsx" örnek kodu kullanır Paket adı olarak.

  2. String türünde bir değişken DtsClient ad alanını ekleyin. Örnek kod, değişken adı olarak ülke kullanın. (Sen-ebilmek lüzum-e doğru tıkırtı Değişken sütunları seç araç çubuğu düğmesinin değişkenleri penceresini görüntülemek için Namespace sütun.)

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

  4. Veri akışı görev pakete eklemek ve veri akışı tasarım yüzeyine geçiş.

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

    SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?
    
    SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?
    
  6. Tıklayın parametreleri ve de Sorgu parametreleri ayarla iletişim kutusunda, sorgu, Parameter0, tek giriş parametresi DtsClient::Country değişken eşleyin.

  7. Toplama dönüşümü veri akışına ekleme ve ole db kaynağı çıkış dönüşümü bağlanın. Toplama dönüşümü Düzenleyicisi'ni açın ve "a"tüm Count peform için yapılandırın işlem tüm giriş sütunları (*) ve diğer CustomerCount toplanan değeri çıktı.

  8. Bir DataReader hedef veri akışına eklemek ve toplama dönüşümün çıktısı için DataReader hedef bağlanın. "DataReaderDest" örnek kodu kullanır DataReader adı olarak. Tek kullanılabilir giriş sütun, CustomerCount, hedef seçin.

  9. Paketi 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.DtsClientaynı adlı derleme atarak ad %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 değişken gerektiği kadar o içerir için gereken komut satırı parametreleri dtexec.exepaketi çalıştırmak için. Örnek kod paket dosya sisteminden yükler.

  5. Değeri değiştirmek dataReaderName değişken gerektiği kadar o içeren paket DataReader hedef adı.

  6. Bir düğme ve metin kutusu formun üzerine koydu. Örnek kod kullanır btnRun düğmenin adı ve txtResults metin kutusunun adını.

  7. Uygulamayı çalıştırmak ve düğmesini tıklatın. Paketi çalıştırır ise kısa duraklamadan sonra formdaki metin kutusunda görüntülenen paket (Kanada müşterilerin sayısı) tarafından hesaplanan toplam 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
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;

    }
  }
}
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 Microsoft video yanı sıra topluluk seçili çözümleri için ziyaret Integration ServicesMSDN sayfası:


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

Ayrıca bkz.

Görevler

Yükleme ve Yerel paket programlı olarak çalıştırmak

Uzak paket programlı olarak çalışan ve yükleme

Kavramlar

Yerel ve uzak arasındaki farklılıkları anlama yürütme