如何解决如何在源的数据流脚本组件中使用 SSIS 数据集?
我正在寻找一种在 SSIS 数据流任务的脚本组件中使用我的数据集变量的方法,这是我迄今为止所尝试的
我的第一个任务是执行 sql 任务(CData Postgresql 任务)
这将运行 Postgre 查询并将结果存储在数据类型为 User::resultSet
的变量 DataSet
中
我的第二个任务是数据流任务
在我的第二个任务中,我希望使用数据集作为我的源。我试图通过使用 Script Component (Source) 来实现这一点
我的脚本
public override void CreateNewOutputRows()
{
DataTable dt = (DataSet)Variables.resultSet;
// The DataTable is Now ready to use! No more recordset quirks.
foreach (DaTarow dr in dt.Rows)
{
// Add a new output row for this transformed data.
OrdersBuffer.AddRow();
// Now populate the columns
OrdersBuffer.id = int.Parse(dr["id"].ToString());
OrdersBuffer.created = int.Parse(dr["created"].ToString());
OrdersBuffer.modified = int.Parse(dr["modified"].ToString());
}
}
问题
在我的脚本中,我想不出将数据集转换为数据表的方法,
我相信我的脚本中的问题行是 DataTable dt = (DataSet)Variables.resultSet;
我也试过 DataTable dt = resultSet.Tables[0];
和 DataTable dt = resultSet.Table[0];
,但它们都抛出语法错误。
非常感谢任何领导或指导。
解决方法
试试这个
DataTable dt = (Variables.resultSet as DataSet).Tables[0];
如果无法进行类型转换,可能会抛出异常。
,我没有使用数据集变量类型,但我没有使用 OBJECT 类型变量和 MS SQL DB。如果您可以更改为使用对象变量,这应该对您有用(或者如果您不能,您可以看到我如何传递 OBJECT 变量并更新您的代码以类似方式访问该变量。
首先,我运行一个 SQL 任务,该任务将结果集作为 SSIS 中输出到我的 OBJECT 变量数据类型。然后我像这样将它传递给我的脚本任务:
在 C# 脚本任务中,我使用以下代码访问 OBJECT 变量,然后将其转换为稍后使用的数据表
这里变量是我在 SSIS 包中的对象变量类型: User::ObjDataToSaveToExportFile
// this gets the data object and sets ti to a data table
OleDbDataAdapter A = new OleDbDataAdapter();
System.Data.DataTable dt = new System.Data.DataTable();
A.Fill(dt,Dts.Variables["User::ObjDataToSaveToExportFile"].Value);
// for test data
//DataTable sourceTable = GetTestData();
DataTable sourceTable = dt;
,
您可以使用以下使用 DataAdapter 填充数据表的方法。 Reference Article
public override void CreateNewOutputRows()
{
// Set up the DataAdapter to extract the data,and the DataTable object to capture those results
OleDbDataAdapter da = new OleDbDataAdapter();
DataTable dt = new DataTable();
// Extract the data from the object variable into the table
da.Fill(dt,Variables.resultSet);
// Since we know the column metadata at design time,we simply need to iterate over each row in
// the DataTable,creating a new row in our Data Flow buffer for each
foreach (DataRow dr in dt.Rows)
{
// Add a new output row for this transformed data.
OrdersBuffer.AddRow();
// Now populate the columns
OrdersBuffer.id = int.Parse(dr["id"].ToString());
OrdersBuffer.created = int.Parse(dr["created"].ToString());
OrdersBuffer.modified = int.Parse(dr["modified"].ToString());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。