Проблемы с задачей сценария служб SSIS и массовой вставкой SQL - C#

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

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

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

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

Вот код C#...

    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[], сигнатура сигнатуры, логический конструктор) в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(параметры объекта obj, Object[], аргументы Object []) в System.Reflection.RuntimeMethoIn. Вызывать (Object obj, BindingFlags invokeAttr, Binder binder, Object[] параметры, CultureInfo culture) в System.RuntimeType.InvokeMember(Строковое имя, BindingFlags bindingFlags, Binder Binder, Object target, Object[] предоставил Args, ParameterModifier[] модификаторы, CultureInfo culture, String[] namedParams) в Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

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

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

Что не так?

1 ответ

Решение

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

Другие вопросы по тегам