Нужна помощь ребятам. Недавно я столкнулся с этой проблемой при разработке пакета для моего клиента. Я сохраняю результирующий набор задачи SQl в пользовательской переменной (объекте), а затем пытаюсь получить к ней доступ в различных задачах сценария. Объем переменной установлен на уровень пакета. Когда я использую приведенный ниже код, я могу получить его значение в задании скрипта S.Container, но если я использую тот же код в скриптовой задаче S.Container2, я не могу. в дальнейшем «dt» просто показывает заголовки, а не данные.Невозможно прочитать объектную переменную в ssis
Любая причина такого поведения.? Что мне не хватает?
SQL Task код -----------
select * from dimproduct
Script код задачи -----------
DataTable dt = new DataTable();
DataRow row = null;
OleDbDataAdapter oleDA = new OleDbDataAdapter();
oleDA.Fill(dt, Dts.Variables["Variable"].Value);
foreach (DataRow row_ in dt.Rows)
{
row = row_;
}
EDIT :: Следующий код также не работает.
Variables lockedVariables = null;
Dts.VariableDispenser.LockForWrite("User::Variable");
Dts.VariableDispenser.GetVariables(ref lockedVariables);
object A;
A= lockedVariables["User::Variable"].Value;
lockedVariables.Unlock();
DataTable dt = new DataTable();
DataRow row = null;
OleDbDataAdapter oleDA = new OleDbDataAdapter();
oleDA.Fill(dt, A);
foreach (DataRow row_ in dt.Rows)
{
row = row_;
}
Да, я. Это всего лишь одна переменная. Не могли бы вы попробовать сами. – Akshay
@Akshay, OK Я попробовал, я получаю те же результаты, что и вы. Похоже, что вызов Fill опустошает исходный адаптер данных. Я бы присвоил datatable, который вы заполняете, новой переменной объекта? – Meff
1 вещь, я не могу понять, почему только заголовки заполняют, а не данные. Еще одна вещь, которую я попробовал, скопировал задачу выполнения SQL на S.Container2, а затем все закончилось отлично. Это поведение скрипта. – Akshay