Проблемы с задачей сценария служб 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
коллекция в задаче сценария. Смотрите это изображение для справки