Я программно генерирую и выполняю пакеты SSIS с использованием C# и SQL Server 2012. Сгенерированные пакеты содержат одну задачу потока данных с плоским файловым источником для чтения CSV и назначение OLE DB, подключенное к SQL Server. Между ними находится компонент Row Count с подключенной функцией SSIS Variable.Как получить количество обработанных строк из программно сгенерированного пакета SSIS в вызывающее приложение?
После завершения выполнения пакета, я хочу получить значение из строки Row обратно в мое вызывающее приложение.
Кажется, что просто создает переменную Count & Row в коде следующим образом:
[...]
// Row count: Create a package variable to store the row count value
var ssisRowCountVariable = package.Variables.Add("MySsisVar", false, "User", 0);
// Row count: Create Row component
IDTSComponentMetaData100 componentRowCount = dataFlowTask.ComponentMetaDataCollection.New();
componentRowCount.Name = "RowCount";
componentRowCount.ComponentClassID = "DTSTransform.RowCount.4";
// Row count: Get row count design-time instance, and initialize component
CManagedComponentWrapper instanceRowCount = componentRowCount.Instantiate();
instanceRowCount.ProvideComponentProperties();
// Row count: Set the variable name property
instanceRowCount.SetComponentProperty("VariableName", "User::MySsisVar");
// Hooking up pipeline Paths
[...]
// Execute package
package.Execute()
, а затем пытается прочитать значение после выполнения пакета:
int Rows = Convert.ToInt32(ssisRowCountVariable.Value);
не работает.
Как я могу вернуть значение компонента Row Count в вызывающее приложение?
Я пробовал второй подход, но PostExecute - это неправильное событие, так как он не имеет параметра, который дает вам информационное сообщение, которое вы упомянули. Событие OnInformation делает (параметр _description_, но пока событие срабатывает несколько раз, ни одно событие с текстом '' <ваше имя назначения> не записывает N строк. – Blade