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
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.
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.
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.
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.
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));
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 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.
Call Dispose yöntem DtsCommand nesne. Tüm kullandıysanız, bu özellikle önemlidir DtsDataParameter nesneler.
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
Yeni oluşturma Integration Services paket. Örnek kod, "DtsClientWParamPkg.dtsx" paket adı olarak kullanır.
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.)
Bağlanan bir OLE DB Bağlantı Yöneticisi'ni ekleme AdventureWorks Örnek Veritabanı'nı tıklatın.
Veri akışı göreve eklemek paket ve veri akışı tasarım yüzeyine geçiş yapar.
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 = ?
' 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.
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.
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.
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
Yeni Windows Forms uygulaması oluşturun.
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.
Kopyalayıp aşağıdaki örnek kod, form için Kod modüle yapıştırın.
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.
Değeri değiştirmek dataReaderName değişken olarak, paketin veri okuyucu hedef adını içeren gerekli.
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ı.
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;
}
}
}
|