如何在 Source 的数据流脚本组件中使用 SSIS 数据集?
How to use a SSIS Dataset inside Dataflow Script component for Source?
我正在寻找一种在 SSIS 数据流任务的脚本组件中使用我的 Dataset 变量的方法,这是我迄今为止尝试过的方法
我的第一个任务是执行 SQL 任务(CData PostgreSQL 任务)
这将 运行 Postgre 查询并将结果存储在数据类型为 DataSet
的变量 User::resultSet
中
我的第二个任务是数据流任务
在我的第二个任务中,我希望使用数据集作为我的来源。我试图通过使用脚本组件(来源)
来实现这一点
我的脚本
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];
但它们都抛出语法错误。
任何领导或指导将不胜感激。
我没有使用数据集变量类型,但我没有使用 OBJECT 类型变量和 MS SQL DB。如果您可以更改为使用对象变量,这应该适合您(或者如果您不能,您可以看到我如何传递 OBJECT 变量并更新您的代码以以类似方式访问变量。
首先,我 运行 一个 SQL 任务,它的结果集在 SSIS 中作为我的 OBJECT 变量数据类型的输出。然后我像这样将它传递给我的脚本任务:
在 C# 脚本任务中,我使用下面的代码来访问 OBJECT 变量,然后将其转换为我稍后使用的数据 table
其中这个变量是我在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;
试试这个
DataTable dt = (Variables.resultSet as DataSet).Tables[0];
如果无法进行类型转换,可能会抛出异常。
您可以使用以下方法使用 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());
}
我正在寻找一种在 SSIS 数据流任务的脚本组件中使用我的 Dataset 变量的方法,这是我迄今为止尝试过的方法
我的第一个任务是执行 SQL 任务(CData PostgreSQL 任务)
这将 运行 Postgre 查询并将结果存储在数据类型为 DataSet
User::resultSet
中
我的第二个任务是数据流任务
在我的第二个任务中,我希望使用数据集作为我的来源。我试图通过使用脚本组件(来源)
来实现这一点我的脚本
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];
但它们都抛出语法错误。
任何领导或指导将不胜感激。
我没有使用数据集变量类型,但我没有使用 OBJECT 类型变量和 MS SQL DB。如果您可以更改为使用对象变量,这应该适合您(或者如果您不能,您可以看到我如何传递 OBJECT 变量并更新您的代码以以类似方式访问变量。
首先,我 运行 一个 SQL 任务,它的结果集在 SSIS 中作为我的 OBJECT 变量数据类型的输出。然后我像这样将它传递给我的脚本任务:
在 C# 脚本任务中,我使用下面的代码来访问 OBJECT 变量,然后将其转换为我稍后使用的数据 table
其中这个变量是我在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;
试试这个
DataTable dt = (Variables.resultSet as DataSet).Tables[0];
如果无法进行类型转换,可能会抛出异常。
您可以使用以下方法使用 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());
}