【发布时间】:2021-05-23 14:17:46
【问题描述】:
setting up the container Assigning the script variables
好的,所以无论我如何处理变量,我的脚本任务都无法使用它们。抛出的错误是通用的,但由于我正在使用 SSDT,我无法单步执行代码或进行任何合理的调试。
我已将其剥离到卸载并重新安装 SSDT 的位置,并从头开始使用一个新包,一次将一行代码添加到自动生成的 ScriptTask 代码中,以确保我是没有遗漏任何东西。一切运行正常,直到我尝试使用包变量提取任何东西,我从自动帮助中复制的代码,并针对 SO 和其他来源进行了验证。 "dts.Variables("User::variablename").value.toString()" 应该根据一切工作,但我无处可去。
我已经尝试过“User::FromFile”、“FromFile”、“Package::FromFile”、“Project::FromFile”和“variables.item(1)”,但这些变体都不起作用.
dts.variables.count 表明脚本确实知道那里有一个变量,并且该变量确实填充,因为我可以获得后续数据流任务来尝试基于它打开文件。
Public Sub Main()
'
' Add your code here
'
Dim currFileName As String
Dim n As Integer
Dts.Events.FireInformation(0, "Script Task", "variables count: " & CType(Dts.Variables.Count, String), "", 0, True)
For n = 1 To Dts.Variables.Count
Dts.Events.FireInformation(0, "Script Task", CType(Dts.Variables.Item(n).Name.ToString, String) & " : " & CType(Dts.Variables.Item(n).Value, String), "", 0, True)
Next
' Debugging - assiging a file path explicity here does work so the loop and the code is fine
Dim filePath As String = "\\Path\File.csv"
Dts.Events.FireInformation(0, "Script Task", "Reading in file " & filePath, "", 0, True)
Try
currFileName = CType(Dts.Variables("FromFile").Value.ToString, String)
Catch
Dts.Events.FireError(999, "Reading Variable", "Can't read filename from variable name", "", 0)
End Try
Dts.Events.FireInformation(0, "Script Task", "Reading in file " & FilePath, "", 0, True)
Dim lines() As String = System.IO.File.ReadAllLines(filePath)
Dts.TaskResult = ScriptResults.Success
End Sub
编辑:使用下面的代码从头开始工作。 但是我仍然不清楚为什么以前尝试使用“.ToString()”或“CType(Dts.Variables(”name任何变化“)。值,字符串)”都不起作用。
即使我将所有这些尝试都包含在 Try-Catch 循环中,我仍然一无所获,我原以为 VB 至少会发现错误,但什么也没有。
更新 #2 目前在......“在 try/catch 中添加一行/代码块并处理错误”的迭代 40(?)。我仍然不明白为什么 try/catch 不能阻止这些调用错误。确定这就是重点吗?
更新 #3 添加额外的 FireInformation 事件会导致失败。将它们注释掉并没有改变失败。重新启动 VS,脚本在几秒钟内完成……什么也没做。注释掉除了@billinkc 的有效代码之外的所有内容......仍然什么都不做。失去住在这里的意愿。
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
【问题讨论】:
标签: ssis sql-server-data-tools