Как выполнить уже имеющийся в MSSQL DTS-пакет.
Хотелось бы пример кода или ссылку на него.
Спасибо.
Здравствуйте, magjam, Вы писали:
M>Как выполнить уже имеющийся в MSSQL DTS-пакет.
M>Хотелось бы пример кода или ссылку на него.
M>Спасибо.
Я делал так (сам в свое время где-то подсмотрел):
1. Подцеплял к проекту библиотеку dtspkg.dll.
2. Этот класс нужен для приема событий, возникающих при исполнении пакета.
class PackageEventsSink : DTS.PackageEvents
{
public void OnQueryCancel(string EventSource, ref bool pbCancel)
{
Console.WriteLine("OnQueryCancel({0})", EventSource);
pbCancel = false;
}
public void OnStart(string EventSource)
{
Console.WriteLine("OnStart({0})", EventSource);
}
public void OnProgress(string EventSource, string ProgressDescription, int PercentComplete, int ProgressCountLow, int ProgressCountHigh)
{
Console.WriteLine("OnProgress({0}, {1}, {2}, {3}, {4})", EventSource, ProgressDescription,
PercentComplete, ProgressCountLow, ProgressCountHigh);
}
public void OnError(string EventSource, int ErrorCode, string Source, string Description, string HelpFile, int HelpContext, string
IDofInterfaceWithError, ref bool pbCancel)
{
Console.WriteLine("OnError({0}, {1}, {2}, {3}, {4}, {5})", EventSource, ErrorCode, Source, Description, HelpFile, HelpContext);
pbCancel = false;
}
public void OnFinish(string EventSource)
{
Console.WriteLine("OnFinish({0})", EventSource);
}
}
3. Действия с пакетом осуществляются через ConnectionPoints:
Package2Class package = new Package2Class();
UCOMIConnectionPointContainer CnnctPtCont = (UCOMIConnectionPointContainer)package;
UCOMIConnectionPoint CnnctPt;
PackageEventsSink PES = new PackageEventsSink();
Guid guid = new Guid("10020605-EB1C-11CF-AE6E-00AA004A34D5"); // UUID of PackageEvents Interface
CnnctPtCont.FindConnectionPoint(ref guid, out CnnctPt);
int iCookie;
CnnctPt.Advise(PES, out iCookie);
object pVarPersistStgOfHost = null;
package.LoadFromSQLServer("(local)", // Имя SQL сервера
null, null, DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection, null, null, null,
"Test2", // Имя DTS пакета
ref pVarPersistStgOfHost);
package.Execute();
package.UnInitialize();
package = null;
CnnctPt.Unadvise(iCookie);
Спасибо, попробую.
Есть такой Microsoft OLE DB Provider for DTS Packages.
Можно ли его как нибудь использовать?