Caricamento ed esecuzione di un pacchetto locale a livello di programmazione
È possibile eseguire pacchetti di Integration Services in base alle necessità o a orari predeterminati utilizzando i metodi descritti in Esecuzione di pacchetti. Tuttavia, con poche righe di codice, è anche possibile eseguire un pacchetto da un'applicazione personalizzata, ad esempio un'applicazione Windows Form, un'applicazione console, un Web Form o un servizio Web ASP.NET oppure un servizio Windows.
In questo argomento viene illustrato quanto segue:
Caricamento di un pacchetto a livello di programmazione
Esecuzione di un pacchetto a livello di programmazione
Tutti i metodi utilizzati in questo argomento per caricare ed eseguire pacchetti richiedono un riferimento all'assembly Microsoft.SqlServer.ManagedDTS. Dopo aver aggiunto il riferimento in un nuovo progetto, importare lo spazio dei nomi Microsoft.SqlServer.Dts.Runtime con un'istruzione using o Imports.
Caricamento di un pacchetto a livello di programmazione
Per caricare un pacchetto a livello di programmazione nel computer locale, indipendentemente dal fatto che si archiviato in locale o in remoto, chiamare uno dei metodi seguenti:
Percorso di archiviazione |
Metodo da chiamare |
---|---|
File |
oppure |
Archivio pacchetti SSIS |
|
SQL Server |
Importante |
---|
I metodi della classe Application per l'utilizzo dell'archivio pacchetti SSIS supportano solo ".", localhost o il nome del server locale. Non è possibile utilizzare "(local)". |
Esecuzione di un pacchetto a livello di programmazione
Lo sviluppo di un'applicazione personalizzata in codice gestito che esegue un pacchetto nel computer locale richiede l'approccio seguente. I passaggi riepilogati in questa sezione sono illustrati nell'applicazione console di esempio seguente.
Per eseguire un pacchetto a livello di programmazione nel computer locale
Avviare l'ambiente di sviluppo di Visual Studio e creare una nuova applicazione nel linguaggio di sviluppo preferito. In questo esempio viene utilizzata un'applicazione console. Tuttavia, è anche possibile eseguire un pacchetto da un'applicazione Windows Form, da un Web Form o servizio Web ASP.NET oppure da un servizio Windows.
Scegliere Aggiungi riferimento dal menu Progetto, quindi aggiungere un riferimento a Microsoft.SqlServer.ManagedDTS.dll. Fare clic su OK.
Utilizzare l'istruzione Imports di Visual Basic o l'istruzione using di C# per importare lo spazio dei nomi Microsoft.SqlServer.Dts.Runtime.
Aggiungere il codice seguente nella routine principale. L'applicazione console completata dovrebbe essere simile all'esempio seguente.
[!NOTA]
Nel codice di esempio è illustrato il caricamento del pacchetto dal file system tramite il metodo LoadPackage. Tuttavia, è anche possibile caricare il pacchetto dal database MSDB chiamando il metodo LoadFromSqlServer o dall'archivio pacchetti Integration Services chiamando il metodo LoadFromDtsServer.
Eseguire il progetto. Nel codice di esempio viene eseguito il pacchetto di esempio CalculatedColumns, installato con gli esempi di SQL Server. Il risultato dell'esecuzione del pacchetto è visualizzato nella finestra della console.
Codice di esempio
Imports Microsoft.SqlServer.Dts.Runtime
Module Module1
Sub Main()
Dim pkgLocation As String
Dim pkg As New Package
Dim app As New Application
Dim pkgResults As DTSExecResult
pkgLocation = _
"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
pkg = app.LoadPackage(pkgLocation, Nothing)
pkgResults = pkg.Execute()
Console.WriteLine(pkgResults.ToString())
Console.ReadKey()
End Sub
End Module
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace RunFromClientAppCS
{
class Program
{
static void Main(string[] args)
{
string pkgLocation;
Package pkg;
Application app;
DTSExecResult pkgResults;
pkgLocation =
@"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
@"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
app = new Application();
pkg = app.LoadPackage(pkgLocation, null);
pkgResults = pkg.Execute();
Console.WriteLine(pkgResults.ToString());
Console.ReadKey();
}
}
}
Acquisizione di eventi da un pacchetto in esecuzione
Quando si esegue un pacchetto a livello di programmazione, come illustrato nell'esempio precedente, è anche possibile acquisire errori e altri eventi che si verificano durante l'esecuzione del pacchetto. A tale scopo, aggiungere una classe che eredita dalla classe DefaultEvents e passare un riferimento a tale classe quando si carica il pacchetto. Anche se nell'esempio seguente viene acquisito solo l'evento OnError, la classe DefaultEvents consente di acquisire molti altri eventi.
Per eseguire un pacchetto a livello di programmazione nel computer locale e acquisire gli eventi del pacchetto
Attenersi alla procedura descritta nell'esempio precedente per creare un progetto.
Aggiungere il codice seguente nella routine principale. L'applicazione console completata dovrebbe essere simile all'esempio seguente.
Eseguire il progetto. Nel codice di esempio viene eseguito il pacchetto di esempio CalculatedColumns, installato con gli esempi di SQL Server. Il risultato dell'esecuzione del pacchetto è visualizzato nella finestra della console, insieme agli eventuali errori che si verificano.
Codice di esempio
Imports Microsoft.SqlServer.Dts.Runtime
Module Module1
Sub Main()
Dim pkgLocation As String
Dim pkg As New Package
Dim app As New Application
Dim pkgResults As DTSExecResult
Dim eventListener As New EventListener()
pkgLocation = _
"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
pkg = app.LoadPackage(pkgLocation, eventListener)
pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)
Console.WriteLine(pkgResults.ToString())
Console.ReadKey()
End Sub
End Module
Class EventListener
Inherits DefaultEvents
Public Overrides Function OnError(ByVal source As Microsoft.SqlServer.Dts.Runtime.DtsObject, _
ByVal errorCode As Integer, ByVal subComponent As String, ByVal description As String, _
ByVal helpFile As String, ByVal helpContext As Integer, _
ByVal idofInterfaceWithError As String) As Boolean
' Add application–specific diagnostics here.
Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description)
Return False
End Function
End Class
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace RunFromClientAppWithEventsCS
{
class MyEventListener : DefaultEvents
{
public override bool OnError(DtsObject source, int errorCode, string subComponent,
string description, string helpFile, int helpContext, string idofInterfaceWithError)
{
// Add application-specific diagnostics here.
Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description);
return false;
}
}
class Program
{
static void Main(string[] args)
{
string pkgLocation;
Package pkg;
Application app;
DTSExecResult pkgResults;
MyEventListener eventListener = new MyEventListener();
pkgLocation =
@"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
@"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
app = new Application();
pkg = app.LoadPackage(pkgLocation, eventListener);
pkgResults = pkg.Execute(null, null, eventListener, null, null);
Console.WriteLine(pkgResults.ToString());
Console.ReadKey();
}
}
}
|