Проблемы с задачей SSIS Script и SQL Bulk Insert - С#

61
7

Вот что я пытаюсь сделать:

Я использую Execute SQL Task (в контейнере цикла ForEach), чтобы выполнить цикл вокруг 20 экземпляров SQL Server с тем же запросом, каждый из которых, очевидно, возвращает строку с одинаковыми столбцами. Это будет полный набор результатов с правильным именем (0) и именем переменной User::TheResults.

Кажется, что этот бит работает нормально, т.е. это не ошибка.

Затем я использую задачу скрипта (С#) для заполнения DataTable с помощью набора результатов SSIS и массового копирования в ранее существующую таблицу SQL Server.

Здесь код С#...

    public void Main()
{
// TODO: Add your code here

OleDbDataAdapter oleDA = new OleDbDataAdapter();
DataTable dt = new DataTable();

oleDA.Fill(dt, Dts.Variables["User::TheRecords"].Value.ToString());

SqlConnection connection = new SqlConnection("Data Source=Server1\Instance1;Initial Catalog=iteration_test;Integrated Security=SSPI");

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "dbo.versiontest";

try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

Dts.TaskResult = (int)ScriptResults.Success;
}

Я получаю сообщение об ошибке при выполнении задачи, но не достаточно явным, чтобы указать на конкретную проблему. В нем просто говорится:

в System.RuntimeMethodHandle.InvokeMethod(Object target, Object [] arguments, Signature sig, Boolean constructor) в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object [] parameters, Object [] arguments) в System.Reflection.RuntimeMethodInfo. Invoke (Object obj, BindingFlags invokeAttr, связующее связующее, параметры Object [], культура CultureInfo) в System.RuntimeType.InvokeMember (имя строки, привязка BindingFlags bindingFlags, связующее связующее, цель объекта, объект [] предоставленыArgs, модификаторы ParameterModifier [], культура CultureInfo, String [] namedParams) в Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

Я - администратор базы данных, который в настоящее время участвует во многих BI-работе, и мои навыки С# так себе. Я предполагаю, что проблема в моей логике кода.

Поэтому просто для того, чтобы повторить, у меня есть набор результатов в SSIS, заданный как переменная, которую я хочу получить в таблице SQL Server. Я делаю это, используя вышеупомянутый скрипт внутри задачи сценария в SSIS.

Что происходит не так?

спросил(а) 2021-01-19T18:06:30+03:00 1 месяц, 1 неделя назад
1
Решение
75

Из ошибки это выглядит так, как Script Task не распознает вашу переменную. Чтобы исправить это, добавьте переменную User::TheRecords в коллекцию ReadOnlyVariables или ReadWriteVariables в Задаче User::TheRecords. См. Это изображение для справки

ответил(а) 2021-01-19T18:06:30+03:00 1 месяц, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема