回应我删除的帖子
我怀疑(我可能是错的)将有限数量的行从 1 个数据流任务传输到另一个的方法是在第一个任务中使用 DataReader,在第二个任务中使用 ScriptTask 作为源。
如果这一切都在一个包中完成,我需要知道如何派生连接字符串以连接到该 DataReader。
我正在寻找一种将处理后的行从一个 DataFlow 任务发送到另一个任务的方法,以简化我的设计并获得更好的控制。
回应我删除的帖子
我怀疑(我可能是错的)将有限数量的行从 1 个数据流任务传输到另一个的方法是在第一个任务中使用 DataReader,在第二个任务中使用 ScriptTask 作为源。
如果这一切都在一个包中完成,我需要知道如何派生连接字符串以连接到该 DataReader。
我正在寻找一种将处理后的行从一个 DataFlow 任务发送到另一个任务的方法,以简化我的设计并获得更好的控制。
这是我对这个问题的非凡解决方案!
RecordSet 源代码和使用的示例
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Linq;
using System.Data.DataSetExtensions;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
private OleDbDataAdapter oleDA = new OleDbDataAdapter();
private DataTable table = new DataTable();
private DataRow[] result;
public override void PreExecute()
{
base.PreExecute();
oleDA.Fill(table, Variables.DatabaseObjects);
var query = from table_address in table.AsEnumerable()
select table_address;
result = query.ToArray<DataRow>();
}
public override void PostExecute()
{
base.PostExecute();
}
public override void CreateNewOutputRows()
{
if (result != null)
{
foreach (DataRow ro in result)
{
Output0Buffer.AddRow();
//----------------------------------------[CHANGE BELOW]-------------------------------------------------
// EXAMPLE:
if (ro["File"] != null && ro["Sequence_ID"] != null && ro["Execution_ID"] != null && ro["Object"] != null)
{
Output0Buffer.File = ro["File"].ToString();
Output0Buffer.SequenceID = Convert.ToInt64(ro["Sequence_ID"]);
Output0Buffer.Object = ro["Object"].ToString();
Output0Buffer.ExecutionID = Convert.ToInt64(ro["Execution_ID"]);
}
//--------------------------------------- [CHANGE ABOVE]------------------------------------------------
}
}
}
}