2011-12-16 3 views
2

Я использую SSIS в BIDS 2008, и я пытаюсь получить счет Object Variable, содержащий список файлов. Любая идея о том, как это сделать?SSIS Count of Object Variable?

Спасибо!

+0

Переменная типа SSIS Объекту присвоено то, что предоставляет свойство Count, и вы хотели бы получить это значение? – billinkc

+0

Да, я хотел бы получить эту ценность, но я не могу понять, как это сделать. – buzzzzjay

ответ

3

Как вы заполняете эту переменную объекта? В зависимости от того, как вы заполняете переменную, можно указать более подходящие способы получения счета. Однако, здесь это быстрый и грязный раствор для вас:

  1. Создать новую переменную целого типа и инициализировать переменную 0
  2. Используйте задачу петлевой Еогеасп перебрать вашего объекта (открыть редактор цикла Еогеасп перейдите к Collections и изменить Enumerator к Foreach ADO Enumerator и переменную исходного объекта ADO к переменной объекта.
  3. Создать Execute SQL Task
  4. на вкладке Общие установите ResultSet в однорядные и ваш SQL заявление SELECT (@Count + 1)
  5. На вкладке «Сопоставление параметров» добавьте новую переменную integer и измените атрибут Parameter Name на @Count
  6. На вкладке «Результат» добавьте новую запись с именем: 0 и имя переменной: ваша вновь созданная целочисленная переменная.

Как только ваш цикл завершен, у вас будет счет объекта.

ПРИМЕЧАНИЕ. Если вы уже итерируете эти файлы (я полагаю, что с тех пор, как вы используете SSIS для заполнения переменной Object с помощью имен файлов), вам нужно выполнить только шаги 1, 3-6.

+0

Звучит здорово, вот чего я боялся. Я хочу, чтобы во время отладки вы могли видеть значения, которые содержит объект, и просто сделать Object.Count. Благодаря! – buzzzzjay

1

Есть ли причина, по которой вы не просто используете задачу сценария?

Учитывая две переменные SSIS, MyObject (Тип объекта) и MyObjectCount (Int32) установлено равным 10.

задачи Сценарий 1 заполняет объект.

// Nothing clever, just fills a List<T> with 
    // MyObjectCount's worth of values. 
    public void Main() 
    { 
     int count = (Int32)Dts.Variables["User::MyObjectCount"].Value; 
     List<bool> obj = new List<bool>(); 
     for (int i = 0; i < count; i++) 
     { 
      obj.Add(false); 
     } 

     Dts.Variables["User::MyObject"].Value = obj; 
     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

задача Script 2 просто присваивает значение переменной MyObject SSIS в локальную переменную, которую я бросил в соответствующий тип. Я сравниваю это число с моим подсчетом ссылок, и они одинаковы.

public void Main() 
    { 
     int refCount = (Int32)Dts.Variables["User::MyObjectCount"].Value; 
     List<bool> obj = Dts.Variables["User::MyObject"].Value as List<bool>; 
     int actualCount = obj.Count; 
     string message = string.Format("Reference count: {0}. Actual count {1}", refCount, actualCount); 

     bool fireAgain = false; 
     Dts.Events.FireInformation(0, "Accessing count", message, string.Empty, 0, ref fireAgain); 
     Dts.TaskResult = (int)ScriptResults.Success; Dts.TaskResult = (int)ScriptResults.Success; 
    } 

Результаты

[Доступ к числу] Информация: Счетчик ссылок: 10. Фактическое количество 10

Если вы не ответственны за то, что толкает объект в переменную SSIS, то вам, возможно, потребуется чтобы обернуть вышеупомянутые экстракции в серию блоков try/catch или применить их как тип, пока не найдете что-то, что время выполнения может преобразовать в строго типизированный объект.