如何访问脚本任务中的RecordSet变量?
发布于 2010-04-08 21:44:28
在脚本选项卡上,确保将变量放入readonlyvariable或readwritevariables文本框中。
下面是一个简单的脚本,我使用它将数据流中的错误(保存在RecordSet变量中)格式化为电子邮件的正文。基本上,我将记录集变量读取到datatable中,并使用for循环逐行处理它。在此任务完成后,我检查了uvErrorEmailNeeded的值,以确定是否有要使用条件流程流连接器发送电子邮件的内容。您还需要在vb脚本中添加对system.xml的引用。这是在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
发布于 2013-01-01 02:14:22
下面列出了我用来从记录集或结果集变量加载C#脚本任务中的数据表的代码。"User::transactionalRepDBs“是Object (System.Object)的SSIS变量,它是通过执行SQL任务脚本中的”完整结果集“加载的。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
}
发布于 2016-10-21 09:07:29
我发现的一种更简单的方法(使用C#)是简单地将对象转换为字符串数组。下面是我的C#代码现在的样子:
public void Main()
{
string[] arreglo = (string[])Dts.Variables["User::arreglo"].Value;
...
foreach (string elemento in arreglo)
{
// do stuff on each element of the array/collection
}
...
}
https://stackoverflow.com/questions/2596992
复制相似问题