У меня есть компонент преобразования скрипта, который получает данные из источника OLEDB и для каждой строки выполняет хранимую процедуру с параметрами, основанными на значении строки. Я использовал эту функциональность в прошлых решениях без проблем, однако теперь она выбрасывает страшное «Ссылка на объект не установлена на экземпляр объекта». Я сравнил все настройки (например, версию фреймворка, ввод / вывод, ссылки на сборки и т. Д.), Которые я могу сравнить между двумя решениями, но безрезультатно. Кажется, есть только проблема с фактической установкой переменных, то есть я могу создать открытый счетчик, вывести сообщение со счетчиком (в методе ProcessInputRow) и увеличить счетчик - это вызовет столько сообщений, сколько строк в исходная таблица. Я также попытался .ToString () для значений переменных без какой-либо удачи.
Ошибка выполнения
Задача потока данных
Входные столбцы
Менеджеры соединений
Сценарий
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
SqlConnection conn = new SqlConnection();
IDTSConnectionManager100 connMgr;
public override void AcquireConnections(object Transaction)
{
connMgr = base.Connections.adoAdminsys;
conn = (SqlConnection)connMgr.AcquireConnection(null);
}
public override void PreExecute()
{
//base.PreExecute();
}
public override void PostExecute()
{
//base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string certNbr = Row.certNbr;
int seqNbr = Row.seqNbr;
try
{
SqlCommand cmd = new SqlCommand("dbo.jbb_test_insert", conn);
cmd.Parameters.Add(new SqlParameter("@certNbr", certNbr));
cmd.Parameters.Add(new SqlParameter("@seqNbr", seqNbr));
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
Опять же, если я сделаю что-то, чтобы отобразить сообщение в буфере строк, оно сгенерирует точное количество раз, когда есть строки в источнике. Я также включил средство просмотра данных между источником и компонентом сценария, чтобы гарантировать, что строки действительно передаются. Кроме того, если я просто попытаюсь отобразить переменные (certNbr, seqNbr) в сообщении, я получу сообщение об ошибке - поэтому я убежден, что проблема связана со строками ввода.