SSIS脚本任务和SQL批量插入的问题 - C#

时间:2016-01-23 08:47:57

标签: c# sql sql-server ssis

这是我想要做的事情:

我使用执行SQL任务(在ForEach循环容器中)使用相同的查询循环遍历大约20个SQL Server实例,每个实例都显然返回具有相同列的行。这将转到具有正确名称(0)和变量名称User::TheResults.

的完整结果集

这一点似乎工作正常,即它没有错误。

然后我使用脚本任务(C#)使用SSIS结果集填充DataTable并将其批量复制到预先存在的SQL Server表中。

这是C#代码......

    public void Main()
    {
        // TODO: Add your code here

        OleDbDataAdapter oleDA = new OleDbDataAdapter();
        DataTable dt = new DataTable();

        oleDA.Fill(dt, Dts.Variables["User::TheRecords"].Value.ToString());

        SqlConnection connection = new SqlConnection("Data Source=Server1\Instance1;Initial Catalog=iteration_test;Integrated Security=SSPI");

        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
        {
            bulkCopy.DestinationTableName = "dbo.versiontest";

            try
            {
                // Write from the source to the destination.
                bulkCopy.WriteToServer(dt);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        Dts.TaskResult = (int)ScriptResults.Success;
    }

我在执行任务时遇到错误,但是它没有明确指出特定问题。它只是声明:

  

at System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] arguments,Signature sig,Boolean constructor)      at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object [] parameters,Object [] arguments)      在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化)      at System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams)      在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

我是一名DBA,目前正在参与大量的BI工作,而我的C#技能也是如此。我假设问题在我的代码逻辑中。

所以回顾一下,我在SSIS中设置了一个结果集作为变量,我希望得到一个SQL Server表。我在SSIS的脚本任务中使用上面的脚本来做这件事。

出了什么问题?

1 个答案:

答案 0 :(得分:2)

从错误看,Script Task似乎无法识别您的变量。要解决此问题,请将变量User::TheRecords添加到“脚本任务”中的ReadOnlyVariablesReadWriteVariables集合中。请参阅此image以获取参考资料