How do you access a RecordSet variable inside a Script Task?
To save data to a Recordset destination and process each row by using the Foreach Loop container. In SQL Server Data Tools (SSDT), create or open an Integration Services package. Create a variable that will contain the recordset saved into memory by the Recordset destination, and set the variable's type to Object.
A RecordSet Destination stores data in memory using an SSIS package object variable. It does not save this data to the external data source. Once we have data in the RecordSet destination, we can use it in SSIS containers such as a Foreach Loop.
The ADO Recordset object is used to hold a set of records from a database table. A Recordset object consist of records and columns (fields). In ADO, this object is the most important and the one used most often to manipulate data from a database.
Listed below is the code I used to load a datatable in a C# script task from a recordset or resultset variable. "User::transactionalRepDBs" is a SSIS variable of Object (System.Object) that was loaded through a "Full result set" from a execute SQL task script. This link assisted me.
using System.Data.OleDb; DataTable dt= new DataTable(); OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.Fill(dt, Dts.Variables["User::transactionalRepDBs"].Value); foreach (DataRow row in dt.Rows) { //insert what you want to do here }
On the script tab, make sure you put the variable in either the readonlyvariables or readwritevariables text boxes.
Here is a simple script that I use to format the errors in a data flow (saved in a RecordSet Variable) into the body of an email. Basically I read the recordset varialbe into a datatable and process it row by row with the for loops. After this task completes I examine the value of uvErrorEmailNeeded to determine if there is anything to email using a conditional process flow connector. You will also need to add a reference to system.xml in your vb script. This is in SQL 2005.
Imports System Imports System.Data Imports System.Math Imports Microsoft.SqlServer.Dts.Runtime Imports System.Xml Imports System.Data.OleDb Public Class ScriptMain Public Sub Main() Dim oleDA As New OleDbDataAdapter Dim dt As New DataTable Dim col As DataColumn Dim row As DataRow Dim sMsg As String Dim sHeader As String oleDA.Fill(dt, Dts.Variables("uvErrorTable").Value) If dt.Rows.Count > 0 Then Dts.Variables("uvErrorEmailNeeded").Value = True For Each col In dt.Columns sHeader = sHeader & col.ColumnName & vbTab Next sHeader = sHeader & vbCrLf For Each row In dt.Rows For Each col In dt.Columns sMsg = sMsg & row(col.Ordinal).ToString & vbTab Next sMsg = sMsg & vbCrLf Next Dts.Variables("uvMessageBody").Value = "Error task. Error list follows:" & vbCrLf & sHeader & sMsg & vbCrLf & vbCrLf End If Dts.TaskResult = Dts.Results.Success End Sub End Class
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With